3

我有以下代碼:如何提供稍後聲明的類的變量應該在前一箇中可見?

#include <stdafx.h> 
#include <vector> 
using namespace std; 

class A; 
class B; 

class A 
{ 
public: 
    A() 
    {} 
    double a; 
    vector<B*> vb; 
    vector<double> wa; 
    void getwa() {for (int i = 0; i < vb.size(); i++) wa.push_back(vb[i]->b);}; 
}; 
class B 
{ 
public: 
    B() 
    {} 
    double b; 
    vector<A*> va; 
    vector<double> wb; 
    void getwb() {for (int i = 0; i < va.size(); i++) wb.push_back(va[i]->a);}; 
}; 

int main() 
{ 
    return 0; 
} 

,我不能因爲使用vb[i]->b的編譯。如何解決類A應該能夠看到B類的變量b

回答

4

您可以分開類聲明和定義來解決這樣的circular dependency issue。 (最好將它們放入單獨的頭文件和實現文件中。

class B; 

class A 
{ 
public: 
    A() 
    {} 
    double a; 
    vector<B*> vb; 
    vector<double> wa; 
    void getwa(); 
}; 

class B 
{ 
public: 
    B() 
    {} 
    double b; 
    vector<A*> va; 
    vector<double> wb; 
    void getwb(); 
}; 

void A::getwa() {for (int i = 0; i < vb.size(); i++) wa.push_back(vb[i]->b);} 
void B::getwb() {for (int i = 0; i < va.size(); i++) wb.push_back(va[i]->a);} 

LIVE

+0

謝謝您的快速答覆。不幸的是,這段代碼無法編譯。您能否介紹整個程序文本? – Roloka

+0

@Roloka我添加了一個現場演示,請檢查它。 – songyuanyao

+0

謝謝!這真是太好了! :) – Roloka

相關問題