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