C++:如何在同一个.cpp上声明两个类在编译时"看到"?

and*_*and 3 c++ forward-declaration

在VS2008上编译此代码时:

  #include <vector>

using namespace std;

class Vertex {

public: double X; 
        double Y;
        double Z;

        int id; // place of vertex in original mesh vertex list

        vector<Vertex*> neighbor; //adjacent vertices

        vector<Triangle*> face; // adjacent triangles

        float cost; // saved cost of collapsing edge

        Vertex *collapse; // 
};



 class Triangle {

public:
    Vertex * vertex[3]; 


};
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

1>.\Triangle.cpp(15) : error C2065: 'Triangle' : undeclared identifier 
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

Dim*_*ima 6

您使用前瞻性声明:

class Traingle;

class Vertex
{
    ...
};

class Triangle
{
    ...
};
Run Code Online (Sandbox Code Playgroud)

类型的前向声明(例如class Triangle)允许您声明指向该类型的指针或引用,但不能声明该类型的对象.换一种说法

class Triangle;
class Vertex
{
  vector<Triangle*> face;
};
Run Code Online (Sandbox Code Playgroud)

会编译,但是

class Triangle;
class Vertex
{
  vector<Triangle> face;
};
Run Code Online (Sandbox Code Playgroud)

不会编译.

此外,类型的前向声明不允许您访问其成员,因为编译器还不知道它们.因此,必须在完全定义类型后定义使用前向声明类型的对象的成员函数.在你的情况下,定义之后class Triangle.

哦,这根本不是Visual Studio特有的.这只是标准的C++.