2012-02-22 85 views
1

基本上我有这个代码,但是GCC抱怨矢量不能使用空类型构造 。有没有人遇到过这个问题 之前?我应该提到Vertex3D只能通过 这个文件中的指针来使用,所以整个编译器应该没有理由知道整个类型为 。我不知道模板在这方面的表现如何。模板参数是否需要前向声明或者是否需要知道类型定义

//#include "cgVertex3D.hpp"                                                
#include "cgDirection3D.hpp" 

#include "cgHandedness.hpp" 

class Vertex3D; // Forward declaration to avoid mutual header include 

class Polygon3D { 
    // Vertices constituting this polygon 
    vector<Vertex3D*> *vertices = NULL; 

    public: 
    ... 
+0

你有'包括'和'使用命名空间标准;'somehwere? – Mat 2012-02-22 18:52:08

+0

GCC产生的错误究竟是什么? – vitaut 2012-02-22 18:55:42

+0

**指针**的矢量对于像3D一样简单的3D顶点听起来很像Java。为什么不只是一个'矢量顶点'? – 2012-02-22 19:03:11

回答

7

所有标准容器都要求类型完整。由于你正在创建一个指针向量,这不是一个问题(从不完整类型派生的指针类型可以用作那里的类型参数)。你的代码中的错误是= NULL;部分(好吧,除非std::vector本身不可用,那么你还必须包括<vector>),这无关紧要。您在构造函数中初始化数据成员,而不是类定义主体。你绝对不需要有一个指向矢量的指针。

// note that you probably *shouldn't* use pointers here, but whatever 
class Polygon3D { 
    std::vector<Vertex3D*> vertices; 
    Polygon3D(); 
    // ... 
}; 

// ... 

Polygon3D::Polygon3D() : vertices() {}