在 linux 中从 windows 迁移程序时,我在使用 c++ 标准模板库时遇到了问题。我正在尝试 typedef 一个模板,并且在此行上收到错误 'expected initializer before '<' token
typedef std::list<std::pair<int,double> > PairList;
任何想法为什么这会使用 mvc++ 而不是使用 g++ 以及如何修复它?
在 linux 中从 windows 迁移程序时,我在使用 c++ 标准模板库时遇到了问题。我正在尝试 typedef 一个模板,并且在此行上收到错误 'expected initializer before '<' token
typedef std::list<std::pair<int,double> > PairList;
任何想法为什么这会使用 mvc++ 而不是使用 g++ 以及如何修复它?
我认为这是关于#includes。
以下真正最小的代码在 Linux 上使用 g++ 完美编译
#include <utility>
#include <list>
typedef std::list< std::pair< int,double> > PairList;
PairList x;
关于标准包含文件要记住的一件事是允许但不要求它们相互调用。(这不像他们可能会污染命名空间,因为他们都使用命名空间 std,你不应该乱用它。)
在 MSVC++ 中,可能包含 ,反之亦然,但在 g++ 标头中并非如此。因此,程序可能在 MSVC++ 中编译而不是在 g++ 中编译,源代码中缺少必需的标头。
确保实际包含所有必需的标题,你应该没问题。
你#include <utility>
为pair
?
我对 G++ 中的代码没有任何问题,并且通常发现它对 STL 的支持非常好。你那里有所有的#include
指令吗?有时这些因平台而异(即使它们不应该)。