字符串上的C ++静态属性初始化错误

时间:2012-03-24 12:48:17

标签: c++ qt class static-methods

#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 ;
}

由于代码提供了所有内容,我如何初始化字符串。

2 个答案:

答案 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>,您的代码将被编译。无需在类外定义静态成员。