Ví dụC++ bao gồm tập tin tiêu đề khác nhau với cùng một thực hiện của lớp trong nhiều file nguồn
a.h
class Dummy {
public:
Dummy() { std::cout << "a.h" << std::endl; }
};
b.h
class Dummy {
public:
Dummy() { std::cout << "b.h" << std::endl; }
};
c.cc
#include "a.h"
void test() {
Dummy a;
}
d.cc
#include "b.h"
int main() {
Dummy a;
return 0;
}
Sau đó biên dịch file nguồn với lệnh
g++ d.cc c.cc
ra là
b.h
nhưng với lệnh
012.g++ c.cc d.cc
ra là
a.h
Câu hỏi của tôi là lý do tại sao không có multiple definition
lỗi và lý do tại sao sản lượng phụ thuộc vào trật tự biên soạn không?
'A a' là gì? Ý bạn là 'Dummy a'? – Mixhab
Hàm tạo của 'Dummy' không được định nghĩa giống nhau trong cả hai tệp tiêu đề. Kết quả là do đó hành vi không xác định - mà một trình biên dịch là không cần thiết để chẩn đoán. d.cc sẽ không biên dịch vì không có định nghĩa về lớp 'A'. – Peter
@Mixhab cố định, nhờ – Scy