由于 std::pair 导致的 GCC (MoSync) 中的 C++ 构建错误
Posted
技术标签:
【中文标题】由于 std::pair 导致的 GCC (MoSync) 中的 C++ 构建错误【英文标题】:C++ build error in GCC (MoSync) due to std::pair 【发布时间】:2013-01-31 16:35:53 【问题描述】:我正在使用 MoSync IDE 为移动平台构建我的 C++ 代码。最初,C++ 代码是由 Visual Studio 2010 单独构建的,没有任何问题。但是当我使用 MoSync IDE 重建 C++ 代码时,它会产生一些错误消息。我的 C++ 代码使用 STL 库,例如 std::pair 和 std::vector 类。下面是在 MoSync IDE 中编译为错误的代码。 MoSync 使用 GCC 3.4.6。所以我认为这是由 GCC 编译器引起的。
template<typename T>
vector< pair<T, int> > histogram(const vector<T>& x, int numBins)
T maxVal, minVal, range, delta, leftEdge, rightEdge;
int i, dummyIdx;
vector<T>::iterator pt;
vector< pair<T, int> > counts(numBins, make_pair(T(), 0));
vector<T> y(x);
//other code ...
错误信息是:
错误:预期为 `;'在“pt”之前(第 6 行)
此模板函数在给定输入向量 x 和 numBins 的情况下计算直方图,并将“counts”作为 (bins, counts) 对返回。最初我在 Visual Studio 2010 中编译了这个 C++ 代码,没有任何错误。但是 MoSync IDE 中的 GCC 给了我这个错误信息。所以这让我很困惑,为什么它无法在 GCC 中构建。
【问题讨论】:
【参考方案1】:vector<T>::iterator
是依赖类型所以你需要使用typename
:
typename vector<T>::iterator pt;
见Where and why do I have to put the "template" and "typename" keywords?
【讨论】:
这行得通。非常感谢。那么为什么 VS2010 不将此标记为错误,而 GCC 将其视为错误呢? @tonga:因为 Visual Studio 的默认模式不是严格的一致性模式。 TBH,我不确定非扩展模式是否也会拒绝它。以上是关于由于 std::pair 导致的 GCC (MoSync) 中的 C++ 构建错误的主要内容,如果未能解决你的问题,请参考以下文章