错误:&#39; const std :: array <int,3u =“”>&amp;&#39;不是类,结构或联合类型

时间:2016-01-29 12:47:05

标签: c++ c++11

我正在尝试为大多数竞争者进行转储,但是当我把一个竞争者放在我的地图的价值时我遇到了问题。有我的代码:

dump.cpp: In instantiation of 'void dumpSingle(const T&) [with T = const std::array<int, 3u>&]':
dump.cpp:59:34:   required from 'static void Dump<T, U>::dump(const T&) [with T = std::array<int, 3u>; bool U = true]'
dump.cpp:75:92:   required from 'void dumpPair(const T&) [with T = std::map<std::basic_string<char>, std::array<int, 3u> >]'
dump.cpp:100:31:   required from here
dump.cpp:51:101: error: 'const std::array<int, 3u>&' is not a class, struct, or union type
  std::copy(cont.cbegin(), cont.cend(), std::ostream_iterator<typename T::value_type>(std::cout, " "));

错误信息是:

var SendAlertsModel = Backbone.Model.extend({

            defaults: {
                customSubject: "",
                customNote: "",
                userList:[],
                alertUserList:[]
            }

        });

你能帮助我找到为什么它没有为此工作但是它主要用于所有其他测试吗?

2 个答案:

答案 0 :(得分:4)

更改为:

static void dump(T const& cont) {
  dumpSingle(cont);
}

Live Demo

原因:decltype(cont)会产生T const&,而不是T,因为您可能会排除。

答案 1 :(得分:0)

我怀疑是因为decltype(cont)是引用类型。用

代替第59行
     dumpSingle<typename std::remove_reference<decltype(cont)>::type>(cont);

为我编译代码,输出看起来合理。

更简单的是,您可以让编译器推导出哪个dumpSingle()来实例化:

     dumpSingle(cont);