在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
我该如何解决这个问题?
答案 0 :(得分:6)
您使用前瞻声明:
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 ++。
答案 1 :(得分:2)
您需要在Vertex类之前转发声明Triangle类。在这种情况下看起来像这样:
#include <vector>
using namespace std;
class Triangle;
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];
};
此previous question似乎包含有关前向声明的详细信息。