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

14.03.2010, 14:36

Übergabe einer Liste an Funktionen

Ich möchte innerhalb einer Funktion eine Stringliste mit Daten aus einer Datei füllen. Ich bekomme aber Probleme mit der übergabe der Liste und würde mich freuen, wenn mir jemand ein paar Tips geben kann, wiei ch das Problem beheben kann :)

Das ist die Funktionsdeklaration:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
void ReadStringFromFile(list<string*> *lData, string sFileName)
{
    FILE *file;
    string sData;
    file = fopen(sFileName.c_str(),"a+b");

    while(fread(&sData,sizeof(string),1,file))
    {
        lData->push_back(sData); //Hier kommt der erste Fehler

    }
    
    fclose(file);
}



Und das der Aufruf in der Main Datei:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
int main ()
{
    list<string*> lstrings;
    list<string*>::iterator i;
    string *test;
    ReadStringFromFile(&lstrings, "blub2.txt"); //Hier kommt der zweite Fehler

    return 0;
}




Und hier die Fehlermeldungen:

Zitat


fileio.cpp(11) : error C2664: 'std::list<_Ty>::push_back': Konvertierung des Parameters 1 von 'std::string' in 'std::basic_string<_Elem,_Traits,_Ax> &' nicht möglich
main.cpp(35) : error C2664: 'ReadStringFromFile': Konvertierung des Parameters 1 von 'std::list<_Ty> *' in 'std::list<_Ty>' nicht möglich

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

14.03.2010, 14:40

Speichere da keine string Zeiger, sondern strings.

btw:
Die Übergabe würde ich eher als Referenz machen, dann musst du nicht checken, ob ein 0 Zeiger übergeben wurde.

Gotbread

Alter Hase

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

3

14.03.2010, 14:41

der erste fehler ist klar, du hast ein string und willst ihn in ein string*
konvertieren. das geht nicht.
nimm doch einfach nur eine list<string>

sizeof(string) geht auch nciht. das ist die größe des stringobjektes,
nicht die des inhaltes.

&sData is is die addresse deines objektes, da solltest du lieber nicht
reinschrieben ;)

du suchst wohl sowas:

C-/C++-Quelltext

1
2
sData.resize(filesize);
fread(&sData[0], filesize, 1, file);
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

Mastermind

unregistriert

4

14.03.2010, 14:51

Zitat von »"drakon"«


Die Übergabe würde ich eher als Referenz machen, dann musst du nicht checken, ob ein 0 Zeiger übergeben wurde.


Wenn das mal das einzige Problem wäre.

5

14.03.2010, 22:31

Zitat von »"Gotbread"«

du suchst wohl sowas:

C-/C++-Quelltext

1
2
sData.resize(filesize);
fread(&sData[0], filesize, 1, file);
Damit erzeugst du undefiniertes Verhalten.

Warum C und C++ mischen? Gibt es einen Grund, der hier gegen std::fstream spricht?

Werbeanzeige