Linker-Fehler nach Operator-Overloading
-
Hallo, ich hab ne kleine Matrix-Klasse geschrieben.
Nun hab ich ne Multiplikation von 2 Matrizen implementiert( * Operator überladen)
Jetzt beschwert sich aber mein Testprogramm, und bringt einen LinkerFehler das ein Symbol bereits mehrfach definiert ist. Muss ich irgendwas in den Buildeinstellungen ändern? Ohne den Operator geht es.
Hier mal der Code
#pragma once namespace MRTR { class Matrix { public: enum directions { X, Y, Z }; Matrix(); Matrix(float data[]); private: void swap(float &a, float &b); float m_contents[16]; }; Matrix operator*(const Matrix& m1,const Matrix& m2) { Matrix result; return result; } }Und hier mein Testprogramm, wie gesagt wenn ich in der Matrix.h den Operator weglasse funktioniert es.
#include "MRTR_Maths\MRTR_Matrix.h" #include <iostream> using namespace MRTR; int main() { Matrix test; test.setEntry(12, 4.4444f); }hier nochmal der Fehler.
MRTR_Maths.lib(MRTR_Matrix.obj) : error LNK2005: "class MRTR::Matrix __cdecl MRTR::operator*(class MRTR::Matrix const &,class MRTR::Matrix const &)" (??DMRTR@@YA?AVMatrix@0@ABV10@0@Z) already defined in test.obj
Debug/test.exe : fatal error LNK1169: one or more multiply defined symbols found
Benutze übrigens Visual Studio NET 2003
-
noch was, wenn ich den operator als friend in die klasse selber reinpacke, funktioniert es. Ich möchte aber gerne wissen, wieso die andere methode nicht funktioniert.
-
möglichkeit 1: prototyp in den header->implementierung in die cpp
möglichkeit 2: project->settings->link->customize->force file output
-
und wenn du ganz sicher bist, das alles richtig sein müsste... lösche mal den debug ordner. (entweder per hand oder mit bereinigen als unterpunkt)
-
elise schrieb:
und wenn du ganz sicher bist, das alles richtig sein müsste... lösche mal den debug ordner. (entweder per hand oder mit bereinigen als unterpunkt)
hab ich schon beides probiert, funktioniert leider nicht.