【问题标题】:compilation error due to adding a namespace由于添加命名空间导致的编译错误
【发布时间】:2016-09-01 02:10:21
【问题描述】:

我收到一个初始化列表转换错误 (static_data.h) (我用g++ -std=c++14)

#include<vector>
#include<string>

namespace Euler2D {

  class static_data{
  public :
    const std::vector<std::string> path{"x","y","z"};
  };

}

但是我可以编译它(并且在另一个类/函数中使用它而不会出现任何问题)

class static_data{
  public :
    const std::vector<std::string> path{"x","y","z"};
  };

那么如何将我的 static_data 类放入命名空间,而不牺牲初始化器列表?

【问题讨论】:

  • 为我工作:ideone.com/QbHVyZ
  • @CinCout 我正在编译这是一个没有主函数的“.h”
  • 你还需要一个入口点,不是吗?
  • 做,我?我刚刚在 .h 文件中编译了第二种情况,并且只使用另一个 C++ 文件中的类而没有问题。我见过其他大型程序使用这种独立的.h 文件我不确定我在这里缺少什么
  • @CinCout 你是对的,它确实需要一个入口点,使用 -c 选项编译,然后从 main 函数中使用可以正常工作。我想知道为什么只有纯类版本没有 -c 选项编译。

标签: c++ namespaces c++14 initializer-list


【解决方案1】:

我认为您使用的是 MSVC 2010?在这种情况下,您将面临以您的方式初始化向量的问题。试试这个,它应该适合您

#include<vector> 
#include<string>
using namespace std;

namespace Euler2D {
    class static_data{
      public :    
        static std::vector<std::string> path;
    };
    const char *initialval[] = {"x", "y", "z"};
    std::vector<std::string> static_data::path(initialval, end(initialval)); 
 }

【讨论】:

  • 使用 gcc 5.3。不是 MSVC。不过我会尝试这个解决方案
  • 当然,一旦你添加了一个主函数,编译器就不会抱怨一个入口点
  • 是的。但我的路径实际上是 const 吗?
  • 你能否解释一下为什么OP的方法不起作用?
  • 我在 MSVC 2010 中看到了向量初始化的问题。虽然我没有使用 gcc,但更高版本的 MSVC 似乎不支持初始化列表,因此我认为它是一个类似的问题
猜你喜欢
  • 2012-07-19
  • 2011-08-26
  • 2012-09-15
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
相关资源
最近更新 更多