2011-12-28 50 views
9
class TConst 
{ 
    const int i; 
    int& ref; 
    public: 
    TConst(int n):i(n),ref(n){} 
    static void p1(){prn(i);}//error here 
}; 

Trình biên dịch của tôi tạo ra lỗi khi tôi cố gắng sử dụng thành viên lớp const trong chức năng thành viên static.Tại sao chúng ta không thể sử dụng các thành viên const trong các hàm thành viên tĩnh?

Tại sao nó không được phép?

+1

Vui lòng luôn đăng lỗi đầy đủ mà bạn nhận được. – orlp

+1

const int vẫn còn ràng buộc với một đối tượng, không phải lớp. – nullpotent

+1

Trong một phương thức tĩnh, không có cá thể lớp để không có thành viên lớp nào ... FYI bạn có thể tạo 'static const int i = 42;' nếu bạn muốn sử dụng nó theo cách này. – AJG85

Trả lời

6

Thành viên const được khởi tạo trong khi xây dựng đối tượng. Các thành viên static không phụ thuộc vào việc tạo đối tượng và không có quyền truy cập vào con trỏ this do đó họ không biết vị trí của biến thành viên const của bạn.

7

Nó sẽ không làm việc ngay cả khi nó không phải là const:

error: a nonstatic member reference must be relative to a specific object 

chức năng tĩnh không thể truy cập các biến thành viên không tĩnh. Điều này là do các biến thành viên không tĩnh phải thuộc về một đối tượng lớp và các hàm thành viên tĩnh không có đối tượng lớp để làm việc với nó.

13

const có nghĩa là những thứ khác nhau. Trong trường hợp này, nó có nghĩa là i là không thay đổi sau khi nó được khởi tạo. Nó không có nghĩa là nó là một hằng số chữ (như tôi tin rằng bạn nghĩ rằng nó có nghĩa là). i có thể khác nhau cho các trường hợp khác nhau của TConst, do đó, logic là static phương pháp không thể sử dụng.

+0

Nó luôn đơn giản như vậy) Cảm ơn – Alexander

Các vấn đề liên quan