VC++ 2010: Linker Error LNK2001 - unresolved external symbol (template)
-
Guten Zag.
Ich komme mir blöd vor, aber kann einen Linker Error gerade einfach nicht beheben, die MSDN hilft mir leider im Moment auch nicht. Oder es ist einfach zu früh.Ich muss gerade viel mit std::vector arbeiten und habe mir ein paar Funktionen gebaut:
----------------------------------------------------------------------
vecutil.h#pragma once #include <vector> template<class T> bool vecContains(const std::vector<T> &vec, const T &t); template<class T> void vecMoveToFront(std::vector<T> &vec, const T &t); template<class T> void vecMoveToFront(std::vector<T> &vec, const int index);Da stehen noch mehr drin, aber die sind atm unbenutzt.
vecutil.cpp
#include "vecutil.h" template<class T> bool vecContains(const std::vector<T> &vec, const T &t) { return vecValidIndex(vecIndexOf(vec, t)); } template<class T> void vecMoveToFront(std::vector<T> &vec, const T &t) { vecMoveToFront(vec, vecIndexOf(vec, t)); } template<class T> void vecMoveToFront(std::vector<T> &vec, const int index) { if(!vecValidIndex(vec, index) || vec.size() < 2) return; T newFirst = vec.at(index); for(int i = index; i > 0; i--) vec[i] = vec.at(i - 1); vec[0] = newFirst; }---------------------------------------------------------------------------
Nun habe ich eine Klasse "BasicWindow", die einen private member std::vector<BasicWindow*> enthaelt. Gekuerzte Deklaration (c&p):
basicwindow.h#pragma once #include <vector> typedef std::vector<BasicWindow*> BasicWindowPtrVec; class BasicWindow { public: // [...] void onChildFocus(BasicWindow *child); // [...] private: BasicWindow *m_parent; BasicWindowPtrVec m_children; };In der einen Methode, die aufgeführt ist, mache ich folgendes:
basicwindow.cpp#include "basicwindow.h" #include "vecutil.h" // [...] void BasicWindow::onChildFocus(BasicWindow *child) { vecMoveToFront(m_children, child); child->m_focus = true; }... so, soviel zum Code. Der mag vielleicht nicht großartig sein, aber sollte doch funktionieren ...
Aber es gibt folgende Linker Meldung:msvc++2010 linker schrieb:
l> basicwindow.obj : error LNK2001: unresolved external symbol "void __cdecl vecMoveToFront<class BasicWindow *>(class std::vector<class BasicWindow *,class std::allocator<class BasicWindow *> > &,class BasicWindow * const &)"
l> LW:\Pfad\Zu\Meiner\Dll : fatal error LNK1120: 1 unresolved externals
Ich kommte da nicht mit. Ist da ein offensichtlicher Fehler?
Ich hoffe, mir kann da jemand behilflich sein und bedanke mich jetzt schon mal!Gruß
-
Hallo,
ja, ist offensichtlich

Template-Code kann nicht in ein cpp-File ausgelagert werden, siehe hier in der FAQ
-
oh ... da war was. Du hast recht, ja. Danke.
[Ausrede]Es lag an der Uhrzeit ...[/Ausrede]