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)
我怎样才能解决这个问题?
您使用前瞻性声明:
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++.