Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Template, unaufgelöste externe symbole, linkerfehler

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.05.2008, 22:02 Uhr
cmos



Hallo ich habe ein kleines Problem..
Zuerst aber ein stück Code der mein Problem schematisch darstellt


C++:
// header
#pragma once
#include <atlcoll.h>

template<class T>
class A
{
    private:
        CAtlArray<T> m_Pos;

    public:
        A(void);
        ~A(void);

        bool IsEmpty();

        void Add(T& t);
        T& GetStart();
        T& GetEnd();

};

// cpp
#include "StdAfx.h"
#include "A.h"

template<class T>
A<T>::A(void)
{
}

template<class T>
A<T>::~A(void)
{
}

template<class T>
bool A<T>::IsEmpty()
{
    return m_Pos.IsEmpty();
}

template<class T>
void A<T>::Add(T& t)
{
    m_Pos.Add(t);
}

template<class T>
T& A<T>::GetStart()
{
    return m_Pos.GetAt(0);
}

template<class T>
T& A<T>::GetEnd()
{
    return m_Pos.GetAt(m_Pos.GetCount() - 1);
}




C++:
#include "Position.h"
#include "A.h"


class B
{
    private:

        A<CPosition> m_Queue;

    public:
        B(void);
        ~B(void);
                                      
};



Wenn ich die Dateien einzeln kompiliere erhalte ich 0 Fehler und 0 Warnungen.
Kompilier ich aber das gesamte Projekt, erhalte ich 3 Fehler.

1>B.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall A<class CPosition>::A<class CPosition>(void)" (??0?$A@VCPosition@@@@QAE@XZ)" in Funktion ""public: __thiscall CSegmentation::CSegmentation(void)" (??0B@@QAE@XZ)".

1>B.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall A<class CPosition>::~A<class CPosition>(void)" (??1?$A@VCPosition@@@@QAE@XZ)" in Funktion ""public: __thiscall B::~B(void)" (??1B@@QAE@XZ)".

Dann steht noch drunte rals 3. Fehler: 2 nicht aufgelöste externe Verweise

Ich benutze Visual Studio 2005 SP1

Woran liegt das ? Habe ich etwas vergessen ?
Wenn ich A nicht als Template schreibe sonder schon fest den Typ vorgebe funktioniert es.

Dieser Post wurde am 16.05.2008 um 22:03 Uhr von cmos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.05.2008, 22:07 Uhr
cmos



Hallo nochmal, ich habe jetzt die Implentierung bei Klasse A mit in den Header geschrieben. Jetzt kann ich ohne Probleme kompilieren. Woran liegt das ?
Was muss man ändern damit die Definitionen in der dazugehörigen cpp stehen dürfen ?

Danke, cmos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.05.2008, 23:33 Uhr
xXx
Devil


Ehm das liegt daran, das es Templates sind.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.05.2008, 23:37 Uhr
cmos



Ok, danke für die Antwort
Habe mich nochmal etwas belesen. Es gibt verschieden Möglichkeiten das zu umgehen.
Hat aber Teils zum NAchteil das man die Typen schon spezifiziern muss.
Aber wie gesagt, es läuft nun.

Grüße und Danke,
cmos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.05.2008, 14:34 Uhr
xXx
Devil


Nja nim Comeau Compiler und du kannst export nutzen

Oder einfach so: www.parashift.com/c++-faq-lite/templates.html#faq-35.14
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: