Я сбит с толком ошибкой компоновщика при использовании следующего кода:«статический сопзЬ Int» вызывает ошибку связывания (неопределенная ссылка)
// static_const.cpp -- complete code
#include <vector>
struct Elem {
static const int value = 0;
};
int main(int argc, char *argv[]) {
std::vector<Elem> v(1);
std::vector<Elem>::iterator it;
it = v.begin();
return it->value;
}
Однако это не удается при компоновке - как-то оно должно иметь символ для значения static const. "
$ g++ static_const.cpp
/tmp/ccZTyfe7.o: In function `main':
static_const.cpp:(.text+0x8e): undefined reference to `Elem::value'
collect2: ld returned 1 exit status
BTW, этот компилятор отлично с -O1 или лучше; но он все еще терпит неудачу в более сложных случаях. Я использую gcc версии 4.4.4 20100726 (Red Hat 4.4.4-13).
Любые идеи, что может быть неправильным с моим кодом?
Возможный дубликат [Weird undefined символы статических констант внутри структуры/класса] (http://stackoverflow.com/questions/4891067/weird-undefined-symbols-of-static-constants-inside-a-struct- класс) – karlphillip
Спасибо за полезную ссылку! В нем также показано альтернативное решение: struct Elem {enum {value = 0}; } ', что кажется довольно привлекательным. – hrr
Возможный дубликат [C++ - определение статических константных целочисленных членов в определении класса] (http://stackoverflow.com/questions/3025997/c-defining-static-const-integer-members-in-class-definition) – ks1322