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

20.08.2006, 12:03

problem mit tbVFile::saveToFile();

Hallo

ich bin gerade bei Aufgabe 3 vom Kapitel 1.
hier mal mein script...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
        tbInit();
        tbVFile* pFile1 = new tbVFile;
        if(pFile1->Init(zip))
        {
            std::cout<<"Fehler! Bitte Beenden sie das Programm!";
        }
        else 
        {
            tbVFile::SaveToFile(filename);
        }
        TB_SAFE_DELETE(pFile1);
        tbExit();
    };


das ist jetzt nur das ende zuvor wird der user noch aufgefordert die nötogen daten einzugeben...
und nun sagt er mit immer:

C-/C++-Quelltext

1
2
c:\dokumente und einstellungen\philipp reitter\eigene dateien\visual studio 2005\c++\my programms\kapitel1\aufgabe 2\aufgabe 2\main.cpp(31) : error C2352: 'tbVFile::SaveToFile' : illegal call of non-static member function
1>        c:\dokumente und einstellungen\philipp reitter\eigene dateien\visual studio 2005\c++\tribase\include\tbvfile.h(55) : see declaration of 'tbVFile::SaveToFile'


hab keine ahnung woher das kommt obwoh ich mich wundere dass man bei tbVFile::SaveToFile(); nur eine variable braucht!

kann mir da jemand weiterhelfen

danke mal im voraus (mit einem r)

Mfg Philipp

2

20.08.2006, 12:15

Steht doch alles in der Meldung. Du versuchst, die Methode SaveToFile aufzurufen, als ob sie statisch wäre, was sie scheinbar nicht ist:

Zitat

Quellcode

1
tbVFile::SaveToFile(filename);

Wenn du nicht weißt, was eine statische Funktion ist, solltest du dir wirklich noch einmal dein C++-Buch in Ruhe durchlesen.
Anstatt sie statisch aufzurufen, musst du die Funktion von deinem tbVFile-Objekt aus aufrufen:

Quellcode

1
pFile1->SaveToFile(filename)

3

20.08.2006, 12:25

ich weiß was ne statische funktion ist aber ich kenn mich bei diesen fehlermeldungen sie aus...

statische funktion: eine function die man einfach aufrufen kann so wie z.b. tbExit(); und nicht wie tbVFile::saveToFile weil da braucht man was davor und zwar was gesavet werden soll... oder?

Anonymous

unregistriert

4

20.08.2006, 12:26

Man braucht ein Objekt der Klasse um die Funktion aufzurufen.
Mit Fehlermeldungen nicht auskennen ist keine Ausrede, denn die sind sehr
eindeutig und ansonsten gibt es die MSDN.

EDIT: Bei Pointern wird der Operator -> benutzt und bei normalen Objekten
einfach ein .

5

20.08.2006, 12:35

tbExit() ist keine statische Funktion sondern eine globale Funktion.
tbVFile::saveToFile ist ebenfalls keine statische Funktion, weil da wird ein Objekt benötigt das beschreibt was gespeichert werden soll, wie du auch richtig sagtest.

Eine statische Funktion gehört immer zu einer Klasse. Du brauchst jedoch kein Objekt dieser Klasse, um auf die Funktion zugreifen zu können. Du könntest zum Beispiel eine Matheklasse schreiben und dort alle Funktionen statisch deklarieren, weil sich ein Objekt einer Matheklasse nicht wirklich lohnt, da die Abläufe nicht durch Objektvariablen "gesteuert" werden.
Es gibt auch statische Variablen, an denen sich das vllt. besser erkennen lässt. Wenn du z.B. einen Zähler einrichten möchtest, der speichert, wie viele Objekte die Klasse besitzt, solltest du eine statische Variable verwenden. Ihr Wert ist sozusagen für die komplette Klasse und nicht nur für ein bestimmtes Objekt.

Werbeanzeige