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

11

09.03.2010, 21:52

Ich habe jetzt die Template Funktion im Header deklariert. Es kommt aber trotzdem noch die selbe Fehlermeldung.

Hier ist nochmal die HPP "FileIo.h" 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 meine Main Funktion:

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;

}

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

12

09.03.2010, 21:54

Wie schon erwähnt, sollte es

C-/C++-Quelltext

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

heißen.

13

09.03.2010, 21:56

Zitat von »"Fred"«

Wie schon erwähnt, sollte es

C-/C++-Quelltext

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

heißen.
Nein, T kann vom Argumenttyp hergeleitet werden.

Ich glaube nach wie vor nicht, dass der Header richtig inkludiert wurde, wenn der Compiler sich über einen nichtdeklarierten Bezeichner beschwert. Ist irgendein Namensraum im Spiel?

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

14

09.03.2010, 21:59

Ja stimmt natürlich. War grade mit meinen Gedanken woanders^^

15

09.03.2010, 22:17

Also ich wüsste nicht was ich beim einbinden falsch gemacht haben sollte.
Zumal eine andere Funktion, aus der selben HPP Datei aufgerufen werden kann.

Hier nochmal der komplette Code:

Die HPP Datei "FileIO.h"

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef FILEIO_HPP
#define FILEIO_HPP
#include <string>

void WriteTextIntoFile(std::string sFileName, std::string sText);

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);
}

#endif


Die CPP Datei:

C-/C++-Quelltext

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

void WriteTextIntoFile(std::string sFileName, std::string sText)
{
    FILE *file;
    file = fopen(sFileName.c_str(),"a+t");
    fprintf(file, sText.c_str());
    fclose(file);

}


Und Main:

C-/C++-Quelltext

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

int main ()
{
    int x;
    //WriteDataIntoFile("blub.tst",x); //Löst den Fehler aus

    WriteTextIntoFile("blub.tst", "Hallo"); //Geht ohne Probleme

    return 0;

}

idontknow

unregistriert

16

09.03.2010, 22:24

IDE?

17

09.03.2010, 22:29

Visual C++ 2008 Express Edition

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

19

09.03.2010, 23:28

Zitat von »"Abcd1234"«


C-/C++-Quelltext

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



das dürfte gar nicht kompilieren
"Don't trust your eyes: They are a hell of a lot smarter than you are"

20

10.03.2010, 11:55

Zitat

Wollen Sie Funktions-Templates über mehrere Module generieren, sollten Sie die Definition des Templates in eine Header-Datei stellen, damit das Template in allen Modulen zur Verfügung steht, in denen die Header-Datei eingebunden wird.

Der Grund dafür ist, dass die endgültige Funktion (Maschinencode) erst beim Aufruf einer durch das Funktions-Template vorgegebenen Funktion erstellt wird. Und dafür benötigt der Compiler den Code der Funktion.


Warum muss es denn unbedingt die alte File-Methodik sein. Warum benutzt du nicht die C++ Stream-Methodik? (nur ein Vorschlag, außer du programmierst in C)

Werbeanzeige