2010-06-02 39 views
6

Tôi đang học một số công cụ lý thuyết CSP (hạn chế sự hài lòng) ngay bây giờ và đang sử dụng thư viện this để phân tích các tệp XML. Tôi đang sử dụng Xcode như một IDE.Lỗi liên kết biểu tượng trùng lặp (trợ giúp C++)

Chương trình của tôi biên dịch tốt, nhưng khi liên kết các tệp, tôi nhận được lỗi biểu tượng trùng lặp với tệp XMLParser_libxml2.hh. tác phẩm của tôi được tách ra như vậy:

Một tập tin tiêu đề lớp bao gồm các tập tin XMLParser trên
Một tập tin thực hiện lớp bao gồm các tập tin header lớp
Một tập tin chính bao gồm các tập tin header lớp

Các trùng lặp biểu tượng đang xảy ra trong main.o và classfile.o, nhưng theo như tôi có thể nói, tôi không thực sự thêm tệp .hh đó hai lần.

Full lỗi:

ld: duplicate symbol bool CSPXMLParser::UTF8String::to<std::basic_string<char, 
std::char_traits<char>, std::allocator<char> > >(std::basic_string<char, 
std::char_traits<char>, std::allocator<char> >&) constin 
/Users/vash265/CSP/Untitled/build/Untitled.build/Debug/Untitled.build/Objects- 
normal/x86_64/dStructFill.o and 
/Users/vash265/CSP/Untitled/build/Untitled.build/Debug/Untitled.build/Objects- 
normal/x86_64/main.o` 

Sao chép việc thực hiện các lớp thành các tập tin chính và tham gia các tập tin thực hiện lớp ra khỏi mục tiêu tổng hợp loại bỏ các lỗi, nhưng đó là một mớ hỗn độn vô tổ chức theo cách này, và tôi sẽ sớm bổ sung thêm các lớp học (và sẽ rất hay khi có chúng trong các tệp riêng biệt).

Như tôi đã hiểu, điều này là do tệp (XMLParser_libxml2.hh) có cả định nghĩa lớp và chức năng và triển khai trong một tệp (và có vẻ như điều này có thể cần thiết do sử dụng các mẫu trong tệp 'tiêu đề' đó). Bất kỳ ý tưởng về làm thế nào để có được xung quanh gắn bó tất cả các tập tin lớp học của tôi trong main.cpp của tôi? (Tôi đã thử #ifdefs, chúng không hoạt động).

+3

Có phải tất cả các chức năng (trừ các hàm thành viên được định nghĩa trong một định nghĩa lớp hoặc các mẫu chức năng) trong tiêu đề được khai báo 'inline'? –

+0

chúng tôi sẽ cần thêm chi tiết về cách mã của bạn được cấu trúc và cần phải biết nếu các lớp tạo ra các lỗi biểu tượng trùng lặp được viết bởi bạn hoặc đã tồn tại. Về cơ bản, mặc dù điều này có nghĩa là bạn đang cố gắng liên kết mã của bạn hai lần. Tuy nhiên nó âm thanh như một vấn đề tôi đã có một lần và điều này là do cách tôi đã xây dựng ứng dụng của tôi tức là tôi đã sử dụng một kết hợp của liên kết tĩnh và năng động. Vì vậy, hãy chắc chắn rằng bạn liên kết mọi thứ tĩnh hoặc tất cả mọi thứ năng động. Để kết hợp cả hai phức tạp và tôi không đi vào đó –

+0

@James Nếu bạn đang đề cập đến tệp tiêu đề được cung cấp trong liên kết, thì tôi tin rằng tất cả các chức năng đều là các hàm thành viên của một lớp học. Đó là một chút khó khăn để nói như mã là loại một mớ hỗn độn. Theo như mã của riêng tôi, tôi không có bất kỳ chức năng nào không phải là chức năng của thành viên. @Yan Các tệp tạo lỗi cuối cùng do tôi tạo. Lỗi phát sinh từ việc bao gồm tiêu đề XMLParser (không phải do tôi viết) trong tệp tiêu đề lớp của tôi, nó được đưa vào tệp chính và các tệp triển khai lớp (mà tôi đã viết và các tệp có tên trong lỗi). – Vash265

Trả lời

3

James đã chính xác. Ba hàm mẫu bên trong tệp tiêu đề cần được khai báo nội dòng cho nó để liên kết đúng cách. Cảm ơn!

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