Tôi có tệp tiêu đề C++ chứa một lớp. Tôi muốn sử dụng lớp này trong một số dự án, bu tôi không muốn tạo ra một thư viện riêng cho nó, vì vậy tôi đặt cả hai phương pháp khai báo và định nghĩa trong file header:lỗi định nghĩa nhiều bao gồm tệp tiêu đề C++ có mã nội tuyến từ nhiều nguồn
// example.h
#ifndef EXAMPLE_H_
#define EXAMPLE_H_
namespace test_ns{
class TestClass{
public:
void testMethod();
};
void TestClass::testMethod(){
// some code here...
}
} // end namespace test_ns
#endif
Nếu bên trong cùng dự án tôi bao gồm tiêu đề này từ nhiều hơn một tập tin cpp, tôi nhận được một lỗi nói rằng "multiple definition of test_ns::TestClass::testMethod()
", trong khi nếu tôi đặt định nghĩa phương pháp bên trong cơ thể lớp này không xảy ra:
// example.h
#ifndef EXAMPLE_H_
#define EXAMPLE_H_
namespace test_ns{
class TestClass{
public:
void testMethod(){
// some code here...
}
};
} // end namespace test_ns
#endif
Kể từ khi lớp được định nghĩa bên trong một không gian tên, không nên hai hình thức tương đương? Tại sao phương pháp được coi là được xác định hai lần trong trường hợp đầu tiên?
Cảm ơn bạn đã chỉ ra điều này ... Tôi đã quên các trình bao gồm trong ví dụ (nhưng không phải trong mã thực tế). –