2016-07-30 11 views
0

私はこのタイプがあります。カスタムタイプでは、autoで宣言するためにイニシャライザが必要ですか?

9 class Node { 
10   string name; 
11   int dependencies; 
12   vector<Node*> children; 
13   unordered_map<string, Node*> map; 
14 
15 
16   public: 
17     Node(string name) : name(name) {} 
18     void decrementDependency() { dependencies--;} 
19     void incrementDependency() { dependencies++;} 
20     string getName() { return name; } 
21     vector<Node*> getChildren() { return children; } 
22     int getNumDependencies() { return dependencies; } 
23 
24     void addDependent(Node* node) { 
25       map[node->getName()] = node; 
26       children.push_back(node); 
27       node->incrementDependency(); 
28     } 
29 }; 

を、私はそうのように、範囲ベースのループでvector<Node*>を反復処理しようとしています:

for (auto Node* node : children) { 
     node->decrementDependency(); 
} 

しかし、コンパイラはerror: declaration of variable 'Node' with type 'auto' requires an initializer、このエラーが発生します。

どうしてですか?それはNode sへのポインタのベクトルだからですか?

答えて

2

auto nodeまたはNode* nodeのいずれかを使用してください(auto Node* nodeではありません)。

for (Node* node : children) { 
     node->decrementDependency(); 
} 

または

for (auto node : children) { 
     node->decrementDependency(); 
} 
+0

それを得た - 感謝を! –

+0

@LeibnizMan、あなたは大歓迎です。ハッピープログラミング! –

+1

「子」はポインタのコンテナであることをより良く知らせるために、 'auto * node'を使うことを提案します – Zereges

関連する問題