2017-04-13 69 views
0

私は次の問題があります。私はクラスBのインスタンスを持っているクラスAを持っており、クラスBはクラスAのインスタンスを持っています。VisualStudio 2013では私に "エラーC2143:行方不明 ';'前に '^' "以下はクラスコードです。事前に感謝エラーC2143:構文エラー: ';'がありません。 「^」の前に

#include "stdafx.h" 
#include "BAsterNode.h" 

using namespace System; 
using namespace System::Collections::Generic; 

ref class BAsterInfo 
{ 
private: 
    IComparable^ info; 
    BAsterNode^ enlaceMayores; /* error C2143 */ 
public: 
    IComparable^ GetInfo(); 
    void SetInfo(IComparable^); 
    BAsterNode^ GetEnlaceMayores(); 
    void SetEnlaceMayores(BAsterNode^ enlaceMayoresP); 
}; 

や他のクラス番目

#include "stdafx.h" 
#include "BAsterInfo.h" 

using namespace System; 
using namespace System::Collections::Generic; 

ref class BAsterNode 
{ 
private: 
    BAsterNode^ enlaceMenores; 
    List<BAsterInfo^>^ listaInformacion; 
     int Find(BAsterInfo^ info); 
public: 
    List<BAsterInfo^>^ GetListaInfo(); 
    void SetListaInfo(List<BAsterInfo^>^ listaInfoP); 
    BAsterNode^ GetEnlaceMenores(); 
    void SetEnlaceMenores(BAsterNode^ enlaceMenoresP); 
}; 

答えて

3

C++/CLIは、C++のように、シングルパスのコンパイルを使用しています。両方のヘッダーファイルが相互にインクルードしているため、プリプロセッサはそれらのうちの1つを先に終了し、2番目のクラスがまだ定義されていないエラーで終了します。未定義のクラスについてのエラーメッセージも表示されているはずです。

これを修正するには、もう一方のヘッダーファイルを含めないでください。 .cppファイルの両方のヘッダーファイルをインクルードし、各ヘッダーファイルで他のクラスの前方宣言を使用します。これにより、さまざまなメソッド宣言で他のクラスを使用できます。他のクラスのメソッドを呼び出すには、.cppからインクルードされたヘッダファイルが必要です。ヘッダファイルに定義されている他のクラスを使用する関数がある場合は、それらを.cppに移動する必要があります。 cpp。

#include "stdafx.h" 

using namespace System; 
using namespace System::Collections::Generic; 

// Forward declaration 
ref class BAsterInfo; 

ref class BAsterNode 
{ 
private: 
    BAsterNode^ enlaceMenores; 
    List<BAsterInfo^>^ listaInformacion; 
     int Find(BAsterInfo^ info); 
public: 
    List<BAsterInfo^>^ GetListaInfo(); 
    void SetListaInfo(List<BAsterInfo^>^ listaInfoP); 
    BAsterNode^ GetEnlaceMenores(); 
    void SetEnlaceMenores(BAsterNode^ enlaceMenoresP); 
}; 
関連する問題