Tôi đang bối rối bởi các mối liên kết lỗi khi sử dụng đoạn mã sau:"static const int" gây liên kết lỗi (undefined-reference)
// 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;
}
Tuy nhiên, điều này không thành công khi liên kết - bằng cách nào đó nó cần phải có một biểu tượng cho giá trị const tĩnh "."
$ 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, điều này biên dịch tốt với -O1 hoặc cao hơn; nhưng nó vẫn không thành công cho các trường hợp phức tạp hơn. Tôi đang sử dụng phiên bản gcc 4.4.4 20100726 (Red Hat 4.4.4-13).
Bất kỳ ý tưởng nào có thể sai với mã của tôi?
có thể trùng lặp của [Biểu thức không xác định trước của hằng số tĩnh bên trong một cấu trúc/lớp] (http://stackoverflow.com/questions/4891067/weird-undefined-symbols-of-static-constants-inside-a-struct- lớp học) – karlphillip
Cảm ơn bạn đã liên kết hữu ích! Nó cũng cho thấy một giải pháp thay thế, 'struct Elem {enum {value = 0}; } ', có vẻ khá hấp dẫn. – hrr
có thể trùng lặp của [C++ - xác định các thành phần nguyên const tĩnh trong định nghĩa lớp] (http://stackoverflow.com/questions/3025997/c-defining-static-const-integer-members-in-class-definition) – ks1322