2017-04-27 2 views
0

VSはこのコードのために奇妙なコンパイラエラーを投げており、9行目に3つのエラーが表示されています。 これまで他のプロジェクトでこれに似たコードを使用しています。 Nodeクラスはヘッダーに含まれており、両方のポインターはコンストラクターでnullptrに設定されています。テンプレートクラスのVSコンパイラエラー

template<class T> 
class Edge 
{ 
public: 
    Edge<T> *next; 
    Node<T> *destination; 
    Edge<T>(); 
    ~Edge(); 
}; 

error C2143: syntax error: missing ';' before '<' 
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
error C2238: unexpected token(s) preceding ';' 

私は最後の2つのエラーが何とか最初に関連していることを前提としていたので、私は「すべての3つの問題を引き起こしていることを一つの小さな構文問題があります推測しています。 私が言ったように、これは前にこれと似たようなことを問題なしでやったので、これは私にはとても混乱しています。

答えて

2

ノードを宣言しましたか?コンパイラはEdgeの前にノードについて知る必要があります。

このcompiles

#include <iostream> 
using namespace std; 

// Use a forward-declaration of Node, so that the compiler knows this type exists. 
template<class T> class Node; 

template<class T> 
class Edge 
{ 
public: 
    Edge<T> *next; 
    Node<T> *destination; 
    Edge<T>(){}; 
    ~Edge(){}; 
}; 

int main() { 
    Edge<int> test; 
    std::cout<<&test<<std::endl; 
    return 0; 
} 

成功時:0メモリ:15240信号:0

0x7ffd75720b70