2012-02-22 3 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

」と「using namespace std; somehwere」を含めましたか? – Mat

+0

GCCが生成するエラーはどういうものですか? – vitaut

+0

**ポインタのベクトル**は、3D頂点のような単純なものに、Javaと非常によく似ています。 「ベクトル vertices'だけではないのはなぜですか? –

答えて

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() {} 
関連する問題