Mam następujący kod w pliku tylko nagłówka.Mieć globalną definicję funkcji w pliku nagłówkowym i uniknąć powielonego błędu powiązania symbolu
#pragma once
class error_code {
public:
unsigned __int64 hi;
unsigned __int64 lo;
};
std::ostream& operator<< (std::ostream& o, const error_code& e) {
return o << "[" << e.hi << "," << e.lo << "]";
}
Dostaję błąd powiązania, gdy w projekcie jest 2 cpp uwzględnij ten plik nagłówkowy.
błąd LNK2005: "klasa kod_błędu operator __cdecl | (klasa kod_błędu const &, klasa ViTrox :: kod_błędu const &)" (? ?? U @@ YA AVerror_code @ 0 @ ABV10 @ 0 @ Z) już zdefiniowane w xxx.obj
wiem, że mogę rozwiązać ten problem, jeśli przeniosę definicję operator<<
do pliku cpp, lub do pliku DLL.
Jednak chciałbym mieć je w pliku nagłówkowym SINGLE. Czy istnieje jakaś technika, aby to osiągnąć? Czy muszę oddzielić definicję od innego pliku?
Komunikat o błędzie jest niezgodny z fragmentem kodu. –