#include <iostream>
#include <cstring>
#include <QString>
using namespace std;
class A {
public:
static const int i = 9;
static const int PI = 1.3;
static const char ch = 's';
static const string str = "hello world"; // <--- error
static const QString str2 = "hello world"; // <--- error
};
int main(int argc, char **argv) {
cout << "Hello world" << endl;
return 0 ;
}
由于代码提供了所有内容,我如何初始化字符串。
答案 0 :(得分:8)
非整数类型成员(包括string
和您的用户定义类型)需要在类定义之外的单个实现文件(.cc
或.cpp
中初始化通常情况下)。
在您的情况下,由于您没有在标题中分隔类定义,因此您可以在课程后立即初始化static
:
class A {
public:
static const int i = 9;
static const int PI = 1.3;
static const char ch = 's';
static const string str;
static const QString str2;
};
const string A::str = "hello world";
const QString A::str2 = "hello world";
编辑:除此之外,正如Nawaz指出的那样,定义string
的头文件是<string>
,而不是<cstring>
。
答案 1 :(得分:3)
首先是第一件事。您尚未加入<string>
。所以先做到这一点:
#include <string>
std::string
在<string>
中定义,而不是<cstring>
,您可能会想到。
之后在C ++ 03中,类的非整数静态成员的初始化必须在类之外。
在C ++ 11中,如果只包含<string>
,您的代码将被编译。无需在类外定义静态成员。