2016-10-12 9 views
2

В C++ можно ли пометить переменную-член класса как extern?Возможно использование переменной extern в классах?

Могу ли я

class Foo { 
    public: 
     extern string A; 
}; 

где строка А определен в другом заголовочном файле, который я включаю?

+3

Это не так. Чего вы пытаетесь достичь? Может быть, вы ищете статические переменные-члены? – krzaq

+0

У меня есть огромный вектор , который я хотел бы включить в исполняемый файл вместо того, чтобы читать его, всякий раз, когда я создаю экземпляр объекта. Я рассмотрю статические переменные-члены. Есть ли способ определить их в другом файле? – nilcit

+0

Да, на самом деле вы почти обязаны. – krzaq

ответ

1

Если я правильно понял ваш вопрос и комментарий правильно, вы ищете static data members

Объявляем поле static:

// with_static.hpp 
struct with_static 
{ 
    static vector<string> static_vector; 
}; 

Определить его в один БПД (± .cpp файл) только:

// with_static.cpp 
vector<string> with_static::static_vector{"World"}; 

Тогда вы можете использовать его. Обратите внимание, что вы можете использовать class::field и object.field обозначения и все они относятся к одному объекту:

with_static::static_vector.push_back("World"); 

with_static foo, bar; 
foo.static_vector[0] = "Hello"; 

cout << bar.static_vector[0] << ", " << with_static::static_vector[1] << endl; 

выше должен печатать Hello, World

live demo

+0

Вектор составляет около 50 000 записей, и я хочу инициализировать его в коде (например, иметь вектор v = {"first_word", "second_word ... «пятьдесят тысячное слово»}). Поскольку он так длинный, я хочу, чтобы его можно было объявить в другом файле. Поэтому у меня есть Foo.h и Foo.cpp; есть ли способ сохранить переменная члена в * другом * файле? – nilcit

+0

Да, см. редактирование. – krzaq

+0

Я не уверен, что полностью понимаю решение. Я хочу, чтобы объявить static_vector в файле with_static.hpp (как и вы), но Я не хочу, чтобы инициализация была в файле with_static.cpp. Я хочу, чтобы что-то вроде static_vector = {"hello", "world"} в * другом * файле. Возможно ли это – nilcit

 Смежные вопросы

  • Нет связанных вопросов^_^