Nếu bạn đang cố gắng chia sẻ các định nghĩa của một cấu trúc giữa các đơn vị biên dịch (tệp cpp), cách thông thường là: Đặt định nghĩa cấu trúc của bạn trong tệp tiêu đề (mystruct.h). Nếu cấu trúc có chứa bất kỳ phương thức nào (nghĩa là nó là một lớp với tất cả thành viên công khai theo mặc định), bạn có thể triển khai chúng trong tệp mystruct.CPP hoặc, nếu chúng là trọng lượng nhẹ, trực tiếp trong cấu trúc (làm cho chúng theo mặc định là inline)).
mystruct.h:
#ifndef MYSTRUCT_H
#define MYSTRUCT_H
struct MyStruct
{
int x;
void f1() { /* Implementation here. */ }
void f2(); /* Implemented in mystruct.cpp */
};
#endif
mystruct.cpp
#include "mystruct.h"
// Implementation of f2() goes here
void MyStruct::f2() { ... }
Bạn có thể sử dụng cấu trúc của bạn trong nhiều file cpp như bạn muốn, chỉ cần #include
mystruct.h:
chính .cpp
#include "mystruct.h"
int main()
{
MyStruct myStruct;
myStruct.x = 1;
myStruct.f2();
// etc...
}
Nếu, mặt khác, bạn đang cố gắng chia sẻ một toàn cầu dụ của struct trên một số đơn vị biên soạn (nó không phải là hoàn toàn rõ ràng từ câu hỏi của bạn), làm như trên mà còn thêm
extern MyStruct globalStruct;
để mystruct .h. Điều này sẽ thông báo rằng một cá thể có sẵn với liên kết bên ngoài; nói cách khác là một biến tồn tại nhưng được khởi tạo ở nơi khác (trong trường hợp của bạn trong mystruct.cpp). Thêm khởi tạo của cá thể chung vào mystruct.cpp:
MyStruct globalStruct;
Điều này quan trọng. Nếu không tạo thủ công một phiên bản globalStruct
, bạn sẽ gặp phải lỗi liên kết unresolved-external. Bây giờ bạn có quyền truy cập vào globalStruct
từ mỗi đơn vị biên dịch bao gồm mystruct.h.
Nguồn
2011-08-18 12:43:26
bạn nên thêm một số mã để có câu trả lời cụ thể hơn cho câu hỏi của mình. – Matthieu