Generischer Wrapper

07/07/2008 - 20:34 von Uwe Homm | Report spam
Liebe Leut',

ich versuche mir eine Wrapper-Klasse für eine generische Liste zu bauen.
Ich habe als Vorgabe eine Klasse List mit einigen ganz bestimmten
Methoden; die wird für Übungen benötigt. Die Klasse soll alle möglichen
Datentypen -also auch Objekte von eigenen Klassen- verwaten können.

Nun wollte ich den STL-Container list verwenden, um keine eigene doppelt
verkettete List schreiben zu müssen. list arbeitet ja (wohl) schon mit
Templates, aber ich dachte, dass ich die durchreichen könnte.

Doch ich scheitere schon an einfachsten Dingen :-(

Ich entwickele das ganze als CLR-Consolenprojekt unter VS2005.

Vielleicht ist aber auch mein Ansatz völlig daneben. Wie sollte man mein
Problem am Besten lösen?

Beim momentanen Quellcode erhalte ich folgende Fehlermeldungen:

Fehler 1 error LNK2020: Nicht aufgelöstes Token (06000001)
List<int>::.ctor. myList.obj

Fehler 2 error LNK2020: Nicht aufgelöstes Token (06000002)
List<int>::~List<int>. myList.obj

Ich poste einfach mal meinen Quellcode, da es noch nicht viel ist.
Vielleicht hat jemand -hallo SvenC!!! ;-) - mal Zeit Lust drüber zu schauen.

***************************************************
// myList.cpp: Hauptprojektdatei.

#include "stdafx.h"
#include "List.h"

using namespace System;

int main(array<System::String ^> ^args)
{
List<int> liste;

//Console::WriteLine(L"Hello World");
return 0;
}
***************************************************
#pragma once

#include <list>
using namespace std;

template <typename T>
ref class List
{
private:
list<T> *daten;

public:
List(void);

void add( T );
//int size();


~List(void);
};
***************************************************
#include "StdAfx.h"
#include "List.h"

template <typename T>
List<T>::List(void)
{
}

template <typename T>
void List<T>::add( T )
{
list<T>::iterator it;
it daten->end();

daten->insert(it, T);

}

/*
template <typename T>
int List<T>::size(void)
{
//Alternativ
//return (int)daten->size();
//bringt auch Fehler :-(

int anzahl=0;
list<T>::iterator it;
for (it=daten->begin(); it != daten->end(); it++)
anzahl++;

return anzahl;
}
*/

template <typename T>
List<T>::~List(void)
{
daten->clear();
}
***************************************************


\\|//
(@ @)
-oOO(_)--OOo
Mit freundlichen Grüssen

Uwe Homm


http://maps.google.com/maps?f=q&...3%A4rtchen

Wissenschaft ist wie Sex – manchmal kommt etwas Nützliches dabei heraus,
aber das ist nicht der Grund, warum wir es betreiben.
Richard P. Feynman (11.05.1918 - 15.02.1988)

Der Vorteil der Klugheit besteht darin, daß man sich dumm stellen kann.
Das Gegenteil ist schon schwieriger.
Kurt Tucholsky (09.01.1890 - 21.12.1935)
 

Lesen sie die antworten

#1 SvenC
07/07/2008 - 21:18 | Warnen spam
Hallo Uwe,

Ich entwickele das ganze als CLR-Consolenprojekt unter VS2005.

Beim momentanen Quellcode erhalte ich folgende Fehlermeldungen:

Fehler 1 error LNK2020: Nicht aufgelöstes Token (06000001)
List<int>::.ctor. myList.obj

Fehler 2 error LNK2020: Nicht aufgelöstes Token (06000002)
List<int>::~List<int>. myList.obj

Ich poste einfach mal meinen Quellcode, da es noch nicht viel ist.
Vielleicht hat jemand -hallo SvenC!!! ;-) - mal Zeit Lust drüber zu
schauen.



Na klar ;-)

Ich weiß ja nicht, wie das C++/CLI mit den Template-Implementierungen
ist, aber im native C++ muss bei VC++ die Implementierung im Header
stehen.
Probier doch mal, ob das auch bei C++/CLI hilft.

***************************************************
#pragma once

#include <list>
using namespace std;

template <typename T>
ref class List
{
private:
list<T> *daten;

public:
List(void);



Also hier...

void add( T );



und hier...

~List(void);



und hier direkt die Implementierung reinpacken und Dein
cpp kannst Du komplett entfernen.

SvenC

Ähnliche fragen