này đôi chút mã gây nên sự tức giận của mối liên kết khi đưa vào ít nhất hai đơn vị dịch (file cpp):Tại sao trình liên kết phàn nàn về nhiều định nghĩa trong mẫu này?
# ifndef MAXIMUM_HPP
# define MAXIMUM_HPP
template<typename T>
T maximum(const T & a, const T & b)
{
return a > b ? a : b ;
}
/* dumb specialization */
template<>
int maximum(const int & a, const int & b)
{
return a > b ? a : b ;
}
# endif // MAXIMUM_HPP
Nhưng biên dịch và liên kết tốt với một đơn vị dịch thuật. Nếu tôi loại bỏ chuyên môn, nó hoạt động tốt trong mọi tình huống. Đây là thông điệp của liên kết:
g++ -o test.exe Sources\test.o Sources\other_test.o
Sources\other_test.o:other_test.cpp:(.text+0x0): multiple definition of `int maximum<int>(int const&, int const&)'
Sources\test.o:test.cpp:(.text+0x14): first defined here
Các mẫu không được phép được khởi tạo nhiều lần? Làm thế nào để giải thích lỗi này và cách khắc phục?
Cảm ơn lời khuyên nào!
Bạn có lẽ nên trả về một tài liệu tham khảo từ các chức năng của mình. – Dani
Nó chỉ là một ví dụ kết quả từ việc theo dõi các lỗi tôi gặp phải trong một mã phức tạp hơn. Tôi nghĩ rằng ví dụ có thể rõ ràng hơn mà không có bất kỳ tham chiếu nào cả :) – overcoder