error C2143: syntax error: missing ';' Before '^'

error C2143: syntax error: missing ';' Before '^'

我有以下问题,我有一个 class A,它有一个 class B 的实例,class B 有一个 class A 的实例。在 VisualStudio 2013 中,出现错误“error C2143: syntax error: missing ';'在'^'"之前下面是class代码。提前致谢

#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);
};

和其他 class

#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);
};

C++/CLI 与 C++ 一样,使用单遍编译。因为两个头文件相互包含,预处理器最终将其中一个放在第一位,而那个头文件最终会出现错误,其中第二个 class 尚未定义。我确定您还会收到有关未定义 class 的错误消息。

要解决此问题,请不要从一个头文件中包含另一个头文件。包含 .cpp 文件中的两个头文件,并在每个头文件中使用其他 class 的前向声明。这将允许您在各种方法声明中使用其他 class。您将需要包含在 .cpp 中的头文件来调用另一个 class 上的任何方法,因此如果您有任何使用头文件中定义的另一个 class 的函数,您我需要将它们移动到 .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);
};