在 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];
};
我收到以下错误:
1>.\Triangle.cpp(15) : error C2065: 'Triangle' : undeclared identifier
我该如何解决这个问题?
最佳答案
您使用前向声明:
class Traingle;
class Vertex
{
...
};
class Triangle
{
...
};
类型的前向声明(例如 class Triangle
)允许您声明指向该类型的指针或引用,但不能声明该类型的对象。也就是说
class Triangle;
class Vertex
{
vector<Triangle*> face;
};
会编译,但是
class Triangle;
class Vertex
{
vector<Triangle> face;
};
不会编译。
此外,类型的前向声明不允许您访问其成员,因为编译器还不知道它们。所以使用前向声明类型的对象的成员函数必须在类型完全定义之后定义。在您的例子中,在 class Triangle
的定义之后。
哦,这根本不是特定于 Visual Studio 的。这只是标准的 C++。
关于C++:如何在编译时使两个类在同一个 .cpp "see"上声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8099051/