0

重複の可能性:
「template」および「typename」キーワードをどこに、なぜ配置する必要があるのですか?
C++セットイテレータの宣言

LinuxシステムでWindowsで正常に動作するC++コードをコンパイルしようとしています。

次のようなエラーがたくさんあります。

code:
..
39          set<Node<T>*>::iterator child;
...

g++エラーが発生します:

Node.h:39: error: expected ‘;’ before ‘child’

これは単なる例です。それを解決する方法についてのヒントを教えてください。

4

1 に答える 1

7

あなたは書く必要があります

typename set<Node<T>*>::iterator child;

実際、コンパイラは、それがテンプレート化されたクラスで定義されたiterator名前であることを認識していません。明示的に伝える必要があります。typeset

Visual Studioでは、これを暗黙的に行うことができます。gccではない。

于 2012-12-04T11:23:36.273 に答える