【发布时间】:2012-05-15 01:45:22
【问题描述】:
以下代码使用 gcc-4.5.1 编译,但不能在 Visual Studio 11 中编译。
#include <map>
#include <array>
typedef std::pair<const unsigned int, std::array<const unsigned int, 4>> pairus;
int main(){
std::map<const unsigned int, std::array<const unsigned int, 4> > x;
std::array<const unsigned int, 4> troll = {1, 2, 3, 4};
x.insert(pairus(1, troll));
auto z = x[1];
}
1 现在映射到std::array<> troll。插入效果很好,程序可以编译。但是,一旦我尝试auto z = x[1] -> 因此尝试获取1 映射到的数组巨魔,程序不会编译并出现以下错误:
error C2512: 'std::array<_Ty,_Size>::array':没有合适的默认构造函数可用
是什么导致了 gcc 和 vs11 之间的这种行为差异以及如何解决它?
谢谢。
【问题讨论】:
-
你确定
pairus不应该是make_pair吗? (但不要认为这是你的问题) -
是的,它工作得很好,pairus 是 std::pair 类型。这种奇怪的编译器行为让我发疯了。
-
pairus 是什么样的(假设它是一个自定义函数?或者它是 MSVC++ 的 make_pair 的别名?)。我怀疑问题可能出在 pairus 上,因为您发布的代码中的任何地方都不需要默认构造函数。 (虽然如果您在地图中没有 k 的情况下执行 x[k],则需要默认 ctor。)
-
@Corbin:他在自己的代码中定义了pairus,高于main。
-
你试过
auto z(x[1]);吗?
标签: c++ visual-studio gcc compiler-errors