Template mehrfach definiert

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Jonathan
Establishment
Beiträge: 2661
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Template mehrfach definiert

Beitrag von Jonathan »

Hi, ich habe mal wieder ein Problemchen mit Templates. Meine Klasse sieht folgendermaßen aus:

Code: Alles auswählen

#pragma once

#include <string>
#include <fstream>

class OArchive
{
public:
	template<typename t> friend OArchive& operator<< (OArchive& Archive, t val);
	OArchive(std::string Filename, bool Tags=true);
private:
	std::ofstream m_File;
	bool m_Tags;//whether to write redundancy tags or not
};

template<typename t> OArchive& operator<< (OArchive& Archive, t val)
{
}


template<> OArchive& operator<< <unsigned int>(OArchive& Archive, unsigned int value)
{
	Archive.m_File << value << std::endl;
	return Archive;
}

template<> OArchive& operator<< <int>(OArchive& Archive, int value)
{
	Archive.m_File << value << std::endl;
	return Archive;
}

template<> OArchive& operator<< <float>(OArchive& Archive, float value)
{
	Archive.m_File << value << std::endl;
	return Archive;
}

template<> OArchive& operator<< <bool>(OArchive& Archive, bool value)
{
	Archive.m_File << value << std::endl;
	return Archive;
}
Sobald ich den Header an mehr als 2 Stellen inkludiere, bekomme ich die Fehlermeldung, dass die Operatoren bereits definiert sind. Gut, bei normalen Funktionen wäre das ja klar, aber bei Templates sollte doch genau das nicht passieren? Was könnte da schief laufen?
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Krishty
Establishment
Beiträge: 8351
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Template mehrfach definiert

Beitrag von Krishty »

Template-Spezialisierungen sind im Sinne des Linkens afaik normale Funktionen, da sie nicht abhängig von Typparametern sind. Du wirst die Spezialisierungen inline definieren müssen.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Jonathan
Establishment
Beiträge: 2661
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Template mehrfach definiert

Beitrag von Jonathan »

Jo, danke.

Hab übrigens auch das hier noch gelesen und bin gleich zu überladenen Funktionen gewechselt:

http://www.gotw.ca/publications/mill17.htm

Aber mit dem inline gings auch, vermutlich hätte es auch im Header deklarieren und in einer cpp einmal definieren getan.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Antworten