2009-04-13 70 views
22

trùng lặp:
C++: undefined reference to static class memberTruy cập các biến lớp tĩnh trong C++?

Nếu tôi có một lớp/struct như thế này

// header file 
class Foo 
{ 
    public: 
    static int bar; 
    int baz; 
    int adder(); 
}; 

// implementation 
int Foo::adder() 
{ 
    return baz + bar; 
} 

này không hoạt động. Tôi nhận được một "tham chiếu không xác định để` Foo :: bar '"lỗi. Làm cách nào để truy cập các biến lớp tĩnh trong C++?

+1

Lưu ý rằng bạn đang thiếu dấu ';' sau khi định nghĩa lớp. – dirkgently

Trả lời

53

Bạn phải thêm dòng sau trong thực hiện file:

int Foo::bar = you_initial_value_here; 

này là cần thiết để trình biên dịch có một vị trí cho biến tĩnh.

16

Đó là cú pháp chính xác, tuy nhiên, Foo::bar phải được xác định riêng biệt, bên ngoài tiêu đề. Trong một trong những .cpp tập tin của bạn, nói điều này:

int Foo::bar = 0; // or whatever value you want 
+0

Xin chào Chris, Có điều gì sai nếu chúng ta có quá nhiều biến thành viên lớp tĩnh công khai trong C++ (mã nguồn không phải đa luồng). Tôi đã di chuyển một số biến toàn cầu của tôi vào một lớp là tĩnh công cộng. – sree

15

Bạn cần thêm một dòng:

int Foo::bar; 

Điều đó sẽ xác định bạn là một lưu trữ. Định nghĩa tĩnh trong lớp tương tự như "extern" - nó cung cấp biểu tượng nhưng không tạo ra nó. tức là

foo.h

class Foo { 
    static int bar; 
    int adder(); 
}; 

Foo.cpp

int Foo::bar=0; 
int Foo::adder() { ... } 
1

để sử dụng các biến tĩnh trong lớp học, trong lần đầu tiên bạn phải cung cấp một giá trị generaly (không localy) để biến tĩnh của bạn (khởi tạo) khi đó bạn có thể truy cập một thành viên tĩnh trong lớp:

class Foo 
{ 
    public: 
    static int bar; 
    int baz; 
    int adder(); 
}; 

int Foo::bar = 0; 
// implementation 
int Foo::adder() 
{ 
    return baz + bar; 
} 
Các vấn đề liên quan