Templatespezialisierung
-
Bin ich bestriebsblind, oder warum krieg ich hier Linkerfehler?
// template<class T> T degreeToRad(T value) { return value * PI / 180.0; } template<> float degreeToRad<float>(float value) { return value * PI_f / 180.0f; }GrindRam.obj : error LNK2005: "float __cdecl MaUt::degreeToRad<float>(float)" (??$degreeToRad@M@MaUt@@YAMM@Z) ist bereits in BelegCADView.obj definiert.
Hab ich was falsch oder will der MSVC nicht so recht?
-
mach mal "rebuild"
ich hatte es schon oefter das er alte sachen in den "obj" gelassen hatte - kahm auch shcon vor das er einfache defines nicht kannte - mit rebuild gehts dann
-
Mr Evil schrieb:
mach mal "rebuild"
ich hatte es schon oefter das er alte sachen in den "obj" gelassen hatte - kahm auch shcon vor das er einfache defines nicht kannte - mit rebuild gehts dann
Hatte ich schon probiert, bringt nix

Ich sollte evtl noch dazu sagen durch mehrere Includes ist die Header-Datei wo das drinne steht auch mehrmals eingebunden teilweise, aber ich habe prama once oben stehen und wenn ich die Spezialisierung raus lassen, dann kompiliert und linkt er auch ohne Probs.
-
Hallo,
entweder überladen:
float degreeToRad(float value) { return value * PI_f / 180.0f; }oder so spezialisieren:
template < > float degreeToRad(float value) { return value * PI_f / 180.0f; }ach ja, kann gut sein, dass der VC6 das nicht packt, der ist bei Templates i.A. ziemlich schwach auf der Brust.
MfG
GPC
-
Ich hab VS 2005 Standard und die zweite Methode von dir klappt leider auch nicht
edit: irgendwie scheint es doch mit dem Inkludieren zusammenzuhängen.
Hab das in ein Testprojekt kopiert, da habe ich dann 0 Fehler.
Hat wer ne Idee?
-
Include-Guards? Templates aus Versehen in cpp Datei implementiert?
Ansonsten haben tommie-lie und ich hier eine längere und aufschlussreiche Diskussion zu dem Thema geführt: http://www.c-plusplus.net/forum/viewtopic-var-t-is-128361-and-start-is-20.html
-
GPC schrieb:
Include-Guards? Templates aus Versehen in cpp Datei implementiert?
Also die Templates stehen nur in einer Headerdatei. Cpp-Datei dazu gibts garnicht.
Was meinst mit Include-Guards?
Ich vermute zumindest, dass es irgendwie am Inkludieren liegt. Kanns was mit vorkompilierten Headern zu tun haben? Wobei die stdafx bei mir nicht den include auf diese Mathesachen hat.
Namenskonflikt mit anderen Bibliotheken ist es auch nicht.Ach ja, danke für deine Hilfe

-
Pellaeon schrieb:
GPC schrieb:
Include-Guards? Templates aus Versehen in cpp Datei implementiert?
Also die Templates stehen nur in einer Headerdatei. Cpp-Datei dazu gibts garnicht.
So soll's ja auch sein

Was meinst mit Include-Guards?
Das hier:
#ifndef MY_HEADER_HPP #define MY_HEADER_HPP #include <algorithm> //weitere includes //hier deine Klassen und Funktionen #endif //MY_HEADER_HPPVerhindert, dass der Header mehrfach eingebunden wird.
Ich vermute zumindest, dass es irgendwie am Inkludieren liegt.
Na ja, wenn's ein Linkerfehler ist, liegt die Vermutung schon nahe.
Ach ja, danke für deine Hilfe

Hehe, ich dachte, ein mal im Leben muss ich auch im MFC Board posten, obwohl ich die MFC hasse und so 'n Linux Frickler bin

-
GPC schrieb:
Was meinst mit Include-Guards?
Das hier:
#ifndef MY_HEADER_HPP #define MY_HEADER_HPP #include <algorithm> //weitere includes //hier deine Klassen und Funktionen #endif //MY_HEADER_HPPVerhindert, dass der Header mehrfach eingebunden wird.
Ja das ist drinne in Form von #pragma once, dem VS sei dank^^
Naja hab jetzt keine Lust mehr. Da probier ich später weiter rum. Falls ich den Fehler finde, poste ich ihn hier.
-
Pellaeon schrieb:
GPC schrieb:
Include-Guards? Templates aus Versehen in cpp Datei implementiert?
Also die Templates stehen nur in einer Headerdatei. Cpp-Datei dazu gibts garnicht.
Die Templates je, aber normale Funktionen benötigen eine eigene CPP-Datei (und die Spezialisierung deiner Funktion dürfte dazu gehören). Versuch's doch mal mit "inline" (bei so einer kurzen Funktion könnte das sowieso sinnvoll sein).
PS: Include Guards helfen übrigens überhaupt nicht gegen Linker-Fehler.