Probleme mit Template Klasse



  • Hi,
    Ich hab ein großes Problem,welches ich einfach nicht gelöst bekomme. Probier jetzt schon den ganzen Tag, kam aber zu nichts ausser zu noch mehr Fehlern 😉 .
    Vielleicht kann mir jemand helfen.

    Es geht um diese Template Klasse: (srolp_dll.h)

    namespace SROLP {
    	template <typename T, int Groesse>
    	class TArray {
    	private:
    		T objekte[Groesse];
    	public:
    		TArray();
    		T * getObjekt(int Index);
    		void setObjekt(const T Objekt, int Index);
    		int setArrayByOtherArray(T * otherArray,WORD length);
    	};
    };
    

    Die Implementation hab ich ausgelagert in die Datei srolp_dll.cpp:

    #include "stdafx.h"
    #include "srolp_dll.h"
    
    	// Klasse TArray
    
    	template <typename T, int Groesse>
    	SROLP::TArray<T,Groesse>::TArray() {
    		ZeroMemory(&objekte[0],Groesse*(sizeof(T)));
    	}
    	template <typename T, int Groesse>
    	T * SROLP::TArray<T,Groesse>::getObjekt(int Index) {
    		return &objekte[Index];
    	}
    	template <typename T, int Groesse>
    	void SROLP::TArray<T,Groesse>::setObjekt(const T Objekt, int Index) {
    		objekte[Index] = Objekt;
    	}
    	template <typename T, int Groesse>
    	int SROLP::TArray<T,Groesse>::setArrayByOtherArray(T * otherArray,WORD readlen) {
    		int errorcode = 0;
    		for (int i = 0;i<readlen;i++)
    			memcpy(&objekte[i],otherArray+(i*sizeof(T)),sizeof(T));
    		return errorcode;
    	}
    

    Anschließend wollte ich ein Objekt dieser Klasse instanzieren: (main.cpp)

    #include "stdafx.h"
    #include "..\..\SROLP\SROLP\srolp_dll.cpp"
    
    int _tmain(int argc, _TCHAR* argv[]) {
    	TArray<UINT,40> item;
    	return 0;
    }
    

    nach dem Start des Compilers kommt es zu folgendem Fehler:

    1>h:\projects\srolp\srolp\srolp_dll.h(64) : error C2953: "SROLP::TArray": Klassenvorlage wurde bereits definiert.
    1> h:\projects\srolp\srolp\srolp_dll.h(56): Siehe Deklaration von 'SROLP::TArray'

    Hab einfach keine Idee was ich noch machen sollte.

    Hier noch der vorkompelierte Headerfile:

    // stdafx.h : Includedatei für Standardsystem-Includedateien
    // oder häufig verwendete projektspezifische Includedateien,
    // die nur in unregelmäßigen Abständen geändert werden.
    //
    
    #pragma once
    
    // SROLP - Login Server
    
    #define SHOW_OUTPUT true
    #define SHOW_INPUT true
    
    #define ANZ_EVENT
    
    // Winsocket 2.0
    
    #ifndef WIN32_LEAN_AND_MEAN
    #define WIN32_LEAN_AND_MEAN
    #endif
    
    // Basic Modules
    
    #include <windows.h>
    #include <winsock2.h>
    #include <ws2tcpip.h>
    #include <winhttp.h>
    #include <iphlpapi.h>
    
    // MySQL
    
    #include "C:\Programme\MySQL\MySQL Server 5.0\include\mysql.h"
    
    // Standard
    
    #include "targetver.h"
    #include <stdio.h>
    #include <tchar.h>
    #include <time.h>
    #include <math.h>
    #include <stdlib.h>
    #include <iostream>
    
    // TODO: Hier auf zusätzliche Header, die das Programm erfordert, verweisen.
    

    Compiler: VS 2008 PE



  • include guards verwenden gegen die mehrfach Definition wär ein vorschlag von mir. solltest hier im Forum einiges dazu finden. Zudem sieht dein include auch nicht gut aus. Template entweder in der gleichen Datei implementieren oder eine .inc am Schluß einbinden und dort die Implemtierung vornehmen, da VS kein export unterstützt fällt dies als Lösungsmöglichkeit hier weg.



  • Danke, jetzt gehts.

    Gruß Ramastuh

    PS: Hätte ich eig auch selber draufkommen müssen 😃 .



  • Ramastuh schrieb:

    Danke, jetzt gehts.

    Gruß Ramastuh

    PS: Hätte ich eig auch selber draufkommen müssen 😃 .

    Hi.

    Darf ich fragen was SRO bedeutet?

    Grüße



  • SRO steht für Silkroad Online (Das LP für Lan Project)

    Gruß Ramastuh



  • Ramastuh schrieb:

    SRO steht für Silkroad Online (Das LP für Lan Project)

    Gruß Ramastuh

    Ob es ihn jetzt noch interessiert?


Log in to reply