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

Gelöschter Benutzer

unregistriert

1

28.12.2013, 16:31

Bezeichner nicht definiert

Hallo,
wie man dem Titel oben entnehmen kann, habe ich in VS 2012 dieses Problem. Explizit geht es um dieses Tutorial: KlickMich. Leider kann ich auf keinen der in der unten aufgeführten Tabelle aufgelisteten Funktionen zugreifen, bzw. nur in der main und ein paar anderen .cpp-Dateien. In dieser geht es leider nicht:
die .hpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef SPEICHERN_HPP
#define SPEICHERN_HPP

#include "Singleton.hpp"
#include "Player.hpp"

#define g_pSpeichern CSpeichern::Get ()
class CSpeichern : public TSingleton<CSpeichern>
{
public:
    CSpeichern();
    ~CSpeichern();
    void savePlayer(CPlayer* instCPlayer);
private:
};

#endif

die .cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include "Speichern.hpp"

// Konstruktor
CSpeichern::CSpeichern()
{
}


// Dekonstruktor
CSpeichern::~CSpeichern()
{
}


// savePlayer
//
// Aufgabe: sämtliche Spielerdaten speichern
//
void CSpeichern::savePlayer(CPlayer* instCPlayer)
{
}

Explizit geht es um diesen Befehl: GetPrivateProfileStringW oder GetPrivateProfileString (aus der Tabelle). Diesen wollte ich in "savePlayer" einbauen, damit ich mit der Funktion die Spielerdaten in einer .ini speichern kann.
Ich freue mich auf eure Hilfe,
alex41018

2

28.12.2013, 16:45

Wie ist denn die genaue Fehlermeldung?

Hast du den die Header inkludiert, in der GetPrivateProfileString deklariert ist? Und die Bibliothek gelinkt, in der es definiert ist? Hast du nach der Dokumentation der Funktion gesucht, um zu sehen, welche Header und Bibliotheken gemeint sind?
Lieber dumm fragen, als dumm bleiben!

Gelöschter Benutzer

unregistriert

3

28.12.2013, 16:56

genaue Fehlermeldung: error C3861: "GetPrivateProfileString": Bezeichner wurde nicht gefunden.
da bei der Seite nichts von Header und Bibliotheken steht, und der Befehl in der main geht, habe ich noch nicht gesucht

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

28.12.2013, 16:58

Du hast die Windows.h wohl nicht eingebunden.
Warum ist "Speichern" bei dir eigentlich eine Klasse? Vom Software-Design her ist das eine Katastrophe.

Gelöschter Benutzer

unregistriert

5

28.12.2013, 17:03

@David: vielen dank, daran lag es :) ich dachte mir mit dem speichern, das man z. b. eine Funktion für das Speichern von den Spielerdaten, eine für die Map, usw. macht? du würdest es in die jeweilige Klasse einbauen?

6

28.12.2013, 17:04

Ist doch an sich nicht verkehrt, sowas auszulagern. Für was muss denn der Player wissen, wie er gespeichert wird? (wobei ich hier natürlich anders benennen würde :P)
Gibt ja auch durchaus die Möglichkeit, verschiedene Methoden zum Speichern anzubieten.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

28.12.2013, 17:06

Auslagern ja, aber nicht in ein Singleton, das "Speichern" heißt.
Wie wäre es mit Serializer oder GameObjectSerializer? Aber bitte kein Singleton!

8

28.12.2013, 17:09

Achso, das meinst du. Du hast Klasse geschrieben, deswegen meine Verwunderung ;)
Klar, Singleton muss hier wirklich nicht sein :P

Gelöschter Benutzer

unregistriert

9

28.12.2013, 17:15

dann werde ich das Singleton rausmachen :) noch eine Frage hierzu:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
// String einlesen
const unsigned long puffer_size = 255;
char puffer[puffer_size];
char ini[] = "c:/game/gegner.ini";
 
GetPrivateProfileString("Gegner_1", "Name", "error", puffer, puffer_size, ini);
 
// Zum Test den Puffer auf den Bildschirm ausgeben
std::cout<<"Name des Gegners: "<<puffer<<std::endl;

Warum kommt hier die Fehlermeldung das z. B. bei "Gegner_1" der Fehler error C2664: 'GetPrivateProfileStringW': Konvertierung des Parameters 1 von 'const char [9]' in 'LPCWSTR' nicht möglich ?( ich habe den Text 1 zu 1 übernommen?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

10

28.12.2013, 17:17

Du hast Unicode in deinem Projekt aktiviert.
GetPrivateProfileString ist darum definiert als GetPrivateProfileStringW, was die Unicode-Variante ist.

Du hast 3 Möglichkeiten:
1. Benutze wchar_t und schreibe ein L vor dein String-Literal.
2. Schalte Unicode in deinem Projekt ab (Projekteigenschaften).
3. Benutze explizit die Nicht-Unicode-Variante der Funktion, die GetPrivateProfileStringA heißt.

Werbeanzeige