1

クラス Node を使用して Node オブジェクトを作成しようとしています:

int main(){
    for(int i=0; i< 20; i++)
        Node *handle = new Node(i, 10);
}

class Node{
 public:
    static vector<Node> map;
    static int totalNodes;
    vector<Node> connections;   
    int NodeID;

    Node(int ID, int weight){
    NodeID = ID;
    CreateConnections(weight);
    totalNodes++;
    map.push_back(*this);
}

何らかの理由で私は得る

'Node' : undeclared identifier
'Node' handle : undeclared identifier
 syntax error : identifier node

クラスの後に main() を下に移動すると、

unresolved external symbol 
for Node::map and Node::totalNodes

私はC ++に少し慣れていないので、ヒントをいただければ幸いです。

4

5 に答える 5

5

クラス定義を ; で終了する必要があります。

 class Node
 {
    //....
    map.push_back(*this);
 };  //^^^Cannot miss ;

Nodeその間、 beforeの宣言を入れる必要がありますmain

別のポイント:

 Node(int ID, int weight){
     NodeID = ID;
     CreateConnections(weight);
     totalNodes++;
     map.push_back(*this);
 }//missing closing } on constructor definition

mapandへの未定義の参照がtotalNodesある理由は、次のとおりです。クラスの静的メンバーは、クラスの外部で初期化する必要があります。したがって、インラインコンストラクターがそれらにアクセスしようとすると、それらは定義されません。したがって、未定義の参照があります。

次のようなことを行う必要があります。

 class Node{
 public:
    static vector<Node> map;
    static int totalNodes;
    vector<Node> connections;   
    int NodeID;
    Node(int ID);
 };


int Node::totalNodes = 0;  //definition of static variables
vector<Node> Node::map;

//^^^define constructor outside class body
Node::Node(int ID){ //your second parameter for ctor not used, so remove it
    NodeID = ID;
    totalNodes++;
    map.push_back(*this);
}
于 2013-04-13T18:29:51.777 に答える
3

あなたはその使用後に宣言Nodeしています。宣言を の前に移動するだけで、mainうまくいくはずです。

class Node { ... };
int main() { ... }

クラスの前方宣言(定義のない識別子の宣言) を行うこともできます。

class Node;
int main() { ... }
class Node { ... };
于 2013-04-13T18:30:54.127 に答える
1

あなたはどちらかのNodeように前方宣言を行う必要があります

class Node;

int main(){
   for(int i=0; i< 20; i++)
   Node *handle = new Node(i, 10);
}

class Node { }; //impelementation

またはmain定義後に配置しclass Nodeます。

于 2013-04-13T18:31:08.603 に答える
1

最初の行に次の行を追加するだけです。

class Node;
于 2013-04-13T18:31:25.140 に答える
1

それが使用されているメインの前に Node 宣言を配置する必要があります。
main の新しい Node は Node を宣言する必要があるため、宣言を進めるだけでは十分ではありません。
未解決の外部については、Node::totalNodes を定義する必要があります

int Node::totalNodes = 0;
于 2013-04-13T18:29:44.747 に答える