0

Windows から Linux にプログラムを移行しているときに、C++ 標準テンプレート ライブラリを使用して問題が発生しました。テンプレートを型定義しようとしていますが、「expected initializer before '<' token on this line」というエラーが表示されます

typedef std::list< std::pair< int,double> > PairList;

これがg ++を使用せずにmvc ++を使用して機能する理由と、それを修正する方法はありますか?

4

4 に答える 4

2

これは #includes に関するものだと思います。

次の本当に最小限のコードは、Linux の g++ で完全にコンパイルされます。

#include <utility>
#include <list>

typedef std::list< std::pair< int,double> > PairList;

PairList x;
于 2009-06-04T18:50:48.503 に答える
1

標準インクルード ファイルについて覚えておくべきことの 1 つは、相互に呼び出すことは許可されていますが、必須ではないということです。(それらはすべて名前空間 std を使用するため、これによって名前空間を汚染する可能性があるわけではありません。これを台無しにすることは想定されていません。)

MSVC++ では include 、またはその逆の可能性がありますが、g++ ヘッダーではそうではありません。したがって、プログラムは g++ ではなく MSVC++ でコンパイルされ、必要なヘッダーがソースにない場合があります。

必要なすべてのヘッダーが実際に含まれていることを確認してください。問題はありません。

于 2009-06-04T19:02:44.533 に答える
0

私は G++ のコードに問題はなく、一般的にその STL サポートは優れていることがわかりました。そこにすべての#include指令がありますか?プラットフォームごとに異なる場合があります (そうでない場合でも)。

于 2009-06-04T18:50:51.843 に答える
0

あなたは#include <utility>しましたpairか?

于 2009-06-04T18:48:01.643 に答える