Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

09.03.2010, 21:29

Template Funktion: Bezeichner nicht gefunden

Hallo Allerseits,

Ich habe ein Problem mit einer Templatefunktion. Die Funktion soll dafür da sein einen beliebigen Datentyp in eine Datei zu schreiben.

Leider bekomme ich immer follgende Fehlermeldung:

Zitat

"WriteDataIntoFile": Bezeichner wurde nicht gefunden.



Das ist die HPP mit dem Prototyp:

C-/C++-Quelltext

1
2
template <class T>
void WriteDataIntoFile(std::string sFilename, T Data);


Und das die zugehörige CPP Datei:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
template <class T>
void WriteDataIntoFile(std::string sFilename, T data)
{
    FILE *file;
    file = fopen(sFileName.c_str(),"a+b");
    fwrite(&data, sizeof(data),1,file);
    fclose(file);
}


Und hier rufe ich die Funktion in meiner Mainfunktion auf:

C-/C++-Quelltext

1
2
3
4
5
6
7
int main ()
{
    int x;
    WriteDataIntoFile("blub.tst",x);
    return 0;

}


Würde mich über Hilfe freuen :)

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

09.03.2010, 21:31

Den Header hast du in der main.cpp (oder wie die auch immer heisst) schon included, oder?

3

09.03.2010, 21:36

Ja, der Header ist includet.

Der Header heißt "FileIO.h".

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include "FileIO.h" 

int main ()
{
    int x;
    WriteDataIntoFile("blub.tst",x);
    return 0;

}

idontknow

unregistriert

4

09.03.2010, 21:42

iirc, muss man templaes im header definieren, kann aber sein, dasss das nur bei KLassen gilt bin mir nicht sicher.

Zumindest wird das in der TriBase Engine im Header tbUtils so gemacht, die templaltes im Header deklariert, würds mal probieren das so zu machen =)

Mischu

Frischling

Beiträge: 21

Wohnort: Olten (Schweiz)

Beruf: Javaentwickler (swissinfo.ch)

  • Private Nachricht senden

5

09.03.2010, 21:44

sollte der Aufruf ned so sein :

C-/C++-Quelltext

1
WriteDataIntoFile<int>("blub.tst",x);


?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

6

09.03.2010, 21:45

Zitat von »"idontknow"«

iirc, muss man templaes im header definieren, kann aber sein, dasss das nur bei KLassen gilt bin mir nicht sicher.


Nein. Stimmt schon. Müssen alle im Header definiert sein.

7

09.03.2010, 21:45

Ich werd das mal testen. Finde die Lösung aber nicht so schön. Gibt es nicht auch eine Möglichkeit die Templates in der CPP Datei zu deklarieren?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

8

09.03.2010, 21:46

Zitat von »"Abcd1234"«

Ich werd das mal testen. Finde die Lösung aber nicht so schön. Gibt es nicht auch eine Möglichkeit dei Templates in der CPP Datei zu deklarieren?


Was du machen kannst ist eine .ipp oder so was ählniches anzulegen, wo du dann die ganzen Definitionen reinpackst und das dann einfach am Ende des Header includest. Kommt aber am Ende auf das gleiche hinaus.

9

09.03.2010, 21:46

Zitat von »"drakon"«

Nein. Stimmt schon. Müssen alle im Header definiert sein.
Das stimmt, aber die fehlende Definition würde in einem Linker- und nicht Compilerfehler resultieren.

Zitat von »"Abcd1234"«

Ich werd das mal testen. Finde die Lösung aber nicht so schön. Gibt es nicht auch eine Möglichkeit dei Templates in der CPP Datei zu deklarieren?
Falls du definieren meinst: Nein (export ist keine Option). Es sei denn, du instanziierst das Template wirklich nur in dieser Datei.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

10

09.03.2010, 21:47

Zitat von »"Nexus"«

(export ist keine Option).

Doch, aber keine funktionierende. ;)

Werbeanzeige