2012-08-22 17 views
6

Tôi đang cố thêm một biến cố định tĩnh vào lớp của tôi, là một thể hiện của một cấu trúc. Vì nó tĩnh, tôi phải khởi tạo nó trong khai báo lớp. Cố gắng mã nàyC++ Khởi tạo biến cấu trúc const tĩnh

class Game { 
    public: 
     static const struct timespec UPDATE_TIMEOUT = { 10 , 10 }; 

    ... 
}; 

Bắt lỗi này:

error: a brace-enclosed initializer is not allowed here before '{' token

error: invalid in-class initialization of static data member of non-integral type 'const timespec'

Làm thế nào để khởi tạo nó? Cảm ơn!

+3

Lưu ý rằng các thông số kiểu được xây dựng ('struct timespec') là khá nhiều không cần thiết trong C++. Chỉ cần viết 'timespec'. – GManNickG

Trả lời

15

Khởi tạo nó trong một định nghĩa riêng biệt bên ngoài lớp, bên trong một tập tin nguồn:

// Header file 
class Game { 
    public: 
     // Declaration: 
     static const struct timespec UPDATE_TIMEOUT; 
    ... 
}; 

// Source file 
const struct timespec Game::UPDATE_TIMEOUT = { 10 , 10 }; // Definition 

Nếu bạn bao gồm định nghĩa trong một tập tin tiêu đề, bạn có thể sẽ nhận được lỗi mối liên kết về những biểu tượng được xác định nhiều nếu tiêu đề đó được bao gồm trong nhiều tệp nguồn.

+1

Tôi khá noob trong C++, tôi đã nghe, tôi nên _declare_ lớp trong 'classname.h' tập tin và _define_ chúng trong' classname.c' tập tin. Và vì vậy tôi sẽ có thể bao gồm tệp '.h' vào các chương trình của tôi nhiều lần tùy theo nhu cầu của tôi, nhưng khi nào và làm cách nào để sử dụng tệp' .c'? Tôi đang sử dụng một trình biên dịch g ++ ... – Kolyunya

+0

'.c' là dành cho các tệp nguồn C, không sử dụng nó cho C++. Sử dụng '.cc' hoặc' .cpp' cho các tệp nguồn C++ ('.cc' thường được ưu tiên trên Linux,' .cpp' thường được ưu tiên trên Windows, nhưng một trong hai sẽ làm). Nói chung, một * tuyên bố * nói "đây là tên của một cái gì đó, nhưng đó là tất cả những gì tôi biết về nó" (ví dụ: tên của một lớp hoặc chức năng). Định nghĩa * * cho biết "đây là tên của một cái gì đó và nó là gì", ví dụ: thành viên lớp học, nội dung chức năng, giá trị biến, v.v. –

+0

có, tôi hiểu điều này, cảm ơn bạn! Tôi khai báo lớp của mình trong tệp '.h', sau đó tôi định nghĩa nó trong tệp' .cpp'. Sau đó, tôi bao gồm '.h' vào chương trình của tôi. Bây giờ câu hỏi: tôi nên làm gì với tệp '.cpp' của tôi? Làm thế nào để tôi sử dụng nó? Tôi có nên viết nó ở đâu đó ở đây 'g ++ main.cpp -o main'? Tôi đang sử dụng g + + trên Linux. – Kolyunya

0

Khai báo biến dưới dạng biến tĩnh bên trong hàm và làm cho hàm đó trả về tham chiếu đến biến.