Ошибка инициализации статического свойства C ++ в строке - PullRequest
1 голос
/ 24 марта 2012
#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 ]

8 голосов
/ 24 марта 2012

Неинтегрированные члены типа (включая string и ваши пользовательские типы) необходимо инициализировать вне определения класса, в одном файле реализации (обычно .cc или .cpp).

В вашем случае, поскольку вы не отделили определение класса в заголовке, вы можете инициализировать static s сразу после вашего класса:

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

РЕДАКТИРОВАТЬ: Кроме того, как указал Навазout, заголовочный файл, который определяет string, равен <string>, а не <cstring>.

3 голосов
/ 24 марта 2012
  • Первым делом первым.Вы не включили <string>.Поэтому сделайте это сначала:

    #include <string>
    

    std::string определено в <string>, а не в <cstring>, как вы, возможно, думаетеC ++ 03, инициализация нецелого статического члена класса, должна быть вне класса.

  • В C ++ 11 ваш код будет компилироваться, если вы включите только <string>.Нет необходимости определять статический член вне класса.

...