2016-08-27 5 views
0

いくつかのことを試しながら、私はc++ shell onlineを使って1つのファイルしか持たない例を作りたかったのです。 単一ファイルのC++循環参照

は、私はあなたが thisのように参照することにより、これを渡す例作ってみました:

// Example program 
#include <iostream> 
#include <string> 
class B; 
class A{ 
public: 
    void passMe(){ 
     B b; 
     b->handle(*this); 
     }; 

     void runMe(){ 
      std::cout << "Did run. "; 
     }; 
}; 

class B{ 
public: 
    void handle(A& refer){ 
     refer.runMe(); 
     }; 
}; 

int main() 
{ 
    A a; 
    a.passMe(); 
} 

をしかし、私は循環参照を持っています。通常、あなたは前向きに(cppファイルにインクルードして)宣言しますが、指定された例(1つのファイルを使用する必要がある)ではわかりません。

サンプルコードを動作させる他のオプションはありますか?

+0

https://stackoverflow.com/questions/625799/resolve-header-include-circular-dependencies-in-c –

+0

@πάνταῥεῖイム宣言転送する方法がありますが持っているような状況を解決する方法を求めていません1つのファイル内の循環参照。 –

+0

始めるには:前方宣言からメンバー 'B b;'を使うことはできません。私のリンクから読んで、それはすべてそこによく説明されています。私はあなたの質問をぶち壊してしまいました。 –

答えて

4

どうすれば解決できますか?入力ミスを修正し、後でpassMeを定義してください。

#include <iostream> 
#include <string> 

class A{ 
public: 
    void passMe(); 
    void runMe(){ 
     std::cout << "Did run. "; 
     }; 
}; 

class B{ 
public: 
    void handle(A& refer){ 
     refer.runMe(); 
     }; 
}; 

void A::passMe() { 
    B b; 
    b.handle(*this); 
} 

int main() 
{ 
    A a; 
    a.passMe(); 
}