I'm trying to declare a constant string in my C++ class, but I get an “Invalid in-class assignment”, and I don't understand why
代码如下:
1 2 3 4 5 6 | #include <string> class Config { public: static const std::string asdf ="hello world!"; } |
我不能诊断出为什么这不起作用
除了整型之外,静态常量成员不能在类定义范围内初始化。你必须把它分开,如下所示。
在头文件中:
1 2 3 4 5 6 | #include <string> class Config { public: static const std::string asdf; }; |
和在.cpp文件中
1 | const std::string Config::asdf ="hello world!"; |
你不能这样做。
因为它是静态的,所以它必须在类之外定义(类内的
在你的情况下:
1 | const std::string Config::asdf ="hello world!" |
您应该初始化构造函数内的所有数据成员,而不是这样:
1 2 3 4 | class A { var_t var = value; }; |
类中只能初始化整型(假定它们声明为
这样做:
1 2 3 4 5 6 7 8 9 10 11 | //Config.h class Config { public: static const std::string asdf; //declaration static const int demo_integral = 100; //initialization is allowed! } //Config.cpp const std::string Config::asdf ="hello world!"; //definition & initialization const int Config::demo_integral; //already initialized in the class! |
定义应该在
来自:
http://cplusplus.syntaxerrors.info/index.php?title=非整数类型的静态数据成员初始化无效
只允许在类定义中首先分配枚举类型或"整型"类型(int、char、long等)的变量。char*不是整型,因此只能在全局范围内分配给它。
您可以将此作为解决方法:
1 2 3 4 5 6 7 8 9 | #include <string> class Config { public: static const std::string asdf() { return"Hello World!"; } }; |
您必须在类外声明它:
1 2 3 4 5 6 7 8 | #include <string> class Config { public: static const std::string asdf ="hello world!"; } const std::string Config::asdf ="hello world"; |
也请看这里。