我试图在我的C ++类中声明一个常量字符串,但是我得到了“无效的类内任务”,我不明白为什么


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!";

你不能这样做。

因为它是静态的,所以它必须在类之外定义(类内的const std::string asdf只是声明,因为static)

在你的情况下:

1
const std::string Config::asdf ="hello world!"

您应该初始化构造函数内的所有数据成员,而不是这样:

1
2
3
4
class A
{
    var_t var = value;
};


类中只能初始化整型(假定它们声明为static const)。

这样做:

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!

定义应该在.cpp文件中,否则如果在头文件本身中定义它们,然后将头文件包含在多个文件中,则会出现多个定义错误!


来自:

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";

也请看这里。