boost ::任何库都不编译:"用作初始化程序的数组"错误

ale*_*son 1 c++ boost c++14

boost::any在C++项目中使用(以及其他Boost功能).

以下用g ++编译我的Mac(MacBook Pro Retina运行最新版本的Mavericks)就好了:

#include <boost/any.hpp>
Run Code Online (Sandbox Code Playgroud)

但是当我使用相同的编译设置/标志使用带有g ++的Ubuntu Linux时,我收到以下错误:

In file included from /home/alexandergunnarson/Documents/Source Code/byu/library/collections.cpp:11:0,
                 from /home/alexandergunnarson/Documents/Source Code/byu/library/collections.h:4,
                 from /home/alexandergunnarson/Documents/Source Code/byu/library/main.cpp:16:
/usr/include/boost/any.hpp: In instantiation of ‘boost::any::holder<ValueType>::holder(const ValueType&) [with ValueType = char [5]]’:
/usr/include/boost/any.hpp:52:49:   required from ‘boost::any::any(const ValueType&) [with ValueType = char [5]]’
/home/alexandergunnarson/Documents/Source Code/byu/library/main.cpp:149:22:   required from here
/usr/include/boost/any.hpp:169:27: error: array used as initializer
               : held(value)
                       ^
Run Code Online (Sandbox Code Playgroud)

collections.cpp:11:0是指#include <boost/any.hpp>声明.

我正在使用Sublime Text 3中的g ++ 4.9和Ubuntu 14.04.

这是一个提升问题还是什么?

谢谢你的帮助!

更新:

由于TC使用他的"心灵力量"来预测,我试图将字符串文字投射到boost::any.现在代码在经过并在string构造函数中放入一些字符串文字并编辑了一些相关函数之后就可以工作了.

T.C*_*.C. 5

我的通灵力量说你试图把一个字符串文字放在一个boost::any.这是不允许的; 字符串文字是const chars的数组,数组不是CopyConstructible,这boost::any需要.

代替

boost::any t("foo");
Run Code Online (Sandbox Code Playgroud)

使用

boost::any t(+"foo");
Run Code Online (Sandbox Code Playgroud)

强制数组衰减到指针,或

boost::any t(std::string("foo")); // or "foo"s in C++14
Run Code Online (Sandbox Code Playgroud)

使它存储一个std::string代替.

  • @ikh应用于数组,一元`+`强制数组到指针转换并返回结果指针. (2认同)