Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Template Klassen und das verflixte Linken

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
14.10.2016, 19:19 Uhr
~procrash
Gast


Hallo,

ich hab da mal ne Frage zur Verwendung von Template Klassen. Irgendwie hab ich da noch nen Wurm drin.

Was ich schonmal herausgefunden habe ist dass man Header Files und CPP Files bei Template Klassen nicht verwenden sollte.

Nichtsdestotrotz bekomme ich aber trotzdem einen Linker Fehler wenn ich meine Template Klasse verwenden will.

Ich habe 3 Klassen die die Template Klasse verwenden

Klasse A
Klasse B und
Klasse C

innerhalb von A befinden sich B und C

B, C und A verwenden meine Template Klasse

Im Grunde genommen ist B ein Slider der unabhängig vom Datentyp implementiert werden soll und C ist ein OpenGL Widget was ebenfalls auf meine Template Klasse zugreifen muss.

Klasse A ist das Eltern Widget worin sich das OpenGL Widget und die Slider befinden.

Ich weiß wie ich das ganze umschiffen könnte (indem ich ein Singleton für den Datentopf verwende) aber das möchte ich nicht, da die Sichtbarkeit des Singletons dann überall wäre.

Den Artikel hierzu habe ich auch schon durchgelesen und alles ausprobiert, komme aber mit den vorgeschlagenen Lösungsansätzen auch nicht weiter:

www.codeproject.com/Articles/48575/How-to-define-a-template-class-in-a-h-file-and-imp

Was könnte ich noch probieren? Wo könnte ich suchen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.10.2016, 09:49 Uhr
Tommix



'Morgen,
es gibt in C++ keine Template-Klassen sondern Klassen-Templates. Ich glaube, viele Probleme beruhen darauf, daß man diesen Unterschied verstehen muß. Und man sollte sehr wohl Header-Files benutzen, sämtliche Template-Bibliotheken beruhen auf diesem Prinzip. Was Dein Problem angeht: Vesuche mal ein minimalistisches Code-Beispiel zu machen, damit wir wissen, worum es geht.

Gruß,
Tommix

Dieser Post wurde am 15.10.2016 um 09:50 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.10.2016, 11:35 Uhr
~procrash
Gast


Minimalbeispiel ist auf Github
https://github.com/procrash/TemplateClassProblem

Das Problem tritt beim Linken auf sobald ich Funktionen des Templates verwenden will.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.10.2016, 08:52 Uhr
Tommix



Hallo,
DataStore::clearData... gibt es nicht. Mit datastor.h

C++:
#pragma once

#include <vector>
#include "dataset.h"

using namespace std;

template<class T>
class DataStore
{
private:
    vector<DataSet<T>> dataSets;
public:
    DataStore();

    void clearData(){/* dosomething */};

    vector<DataSet<T>>* getDataSet();
};


läuft es zumindest durch den Compiler.

- Tommix
 
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: