0

在 linux 中从 windows 迁移程序时,我在使用 c++ 标准模板库时遇到了问题。我正在尝试 typedef 一个模板,并且在此行上收到错误 'expected initializer before '<' token

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

任何想法为什么这会使用 mvc++ 而不是使用 g++ 以及如何修复它?

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

关于标准包含文件要记住的一件事是允许但不要求它们相互调用。(这不像他们可能会污染命名空间,因为他们都使用命名空间 std,你不应该乱用它。)

在 MSVC++ 中,可能包含 ,反之亦然,但在 g++ 标头中并非如此。因此,程序可能在 MSVC++ 中编译而不是在 g++ 中编译,源代码中缺少必需的标头。

确保实际包含所有必需的标题,你应该没问题。

于 2009-06-04T19:02:44.533 回答
0

#include <utility>pair

于 2009-06-04T18:48:01.643 回答
0

我对 G++ 中的代码没有任何问题,并且通常发现它对 STL 的支持非常好。你那里有所有的#include指令吗?有时这些因平台而异(即使它们不应该)。

于 2009-06-04T18:50:51.843 回答