Hallo zusammen,
ich habe Heiko Kalistas Buch durch und bin dabei das Spiel am Ende des Buchs zu erweitern.
Nun wollte ich mir eine Template-Klasse erstellen, um mir das Speichern und Laden zu vereinfachen und den Quellcode übersichtlicher zu halten.
Das Kompilieren klappt soweit auch fast, nur beim Verknüpfen kommt jedes mal der Fehler:
Dieser Moment, wenn du einen Beitrag gepostet hast und du merkst, dass mit "Eingabe" in der Forumüberschrift nicht die Ein- und Ausgabe bei Dateien gemeint ist
1>Verknüpfen...
1>Menu.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: void __thiscall CSave<int>::Load(int *,char * const)" (?Load@?$CSave@H@@QAEXPAHQAD@Z)".
1>Score.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: void __thiscall CSave<int>:ave(int const *,char * const)" (?Save@?$CSave@H@@QAEXPBHQAD@Z)".
1>C:\Users\Oskar\Desktop\Programmieren\Source\Kapitel 12\SDL_Game\Release\SDL_Game.exe : fatal error LNK1120: 2 nicht aufgelöste externe Verweise.
Und hier noch einmal die Stellen im Quellcode wo der Fehler sitzen könnte:
Die Save.hpp:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#ifndef SAVE_HPP
#define SAVE_HPP
#include <fstream>
#include <iostream>
#include "Singleton.hpp"
using namespace std;
template<class T>
class CSave
{
public:
void Save(const T *pData, char Filename[]);
void Load(T *pData, char Filename[]);
};
#endif
|
Die Save.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
23
24
25
26
27
|
#include "Save.hpp"
template <class T>
void CSave<T>::Save(const T *pData, char Filename[])
{
ofstream Output((char *) Filename, ios::binary);
if (Output != NULL)
{
Output.write((char *) pData, sizeof (*pData));
Output.close();
}
else
cout << "Fehler beim Speichern von: " << Filename << endl;
}
template <class T>
void CSave<T>::Load(T *pData, char Filename[])
{
ifstream Input((char *)Filename, ios::binary);
if (Input != NULL)
{
Input.read((char *) pData, sizeof (*pData));
Input.close();
}
else
cout << "Fehler beim Laden von: " << Filename << endl;
}
|
Ein Beispiel wie ich die Funktion aufrufe:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
|
void CScore::Save()
{
CSave<int> Save;
int Score = m_Score + m_Bonus;
int Highscore = 0;
Save.Load(&Highscore, "Data/Highscore.hsc");
if (Score > Highscore)
{
Save.Save(&Score, "Data/Highscore.hsc");
}
}
|
Vielen Dank schon einmal im voraus
zombiepicman