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

03.01.2015, 13:29

Nicht aufgelöstes externes Symbol

Hi Leute,
ich habe das Problem, dass ich eine eigene Klasse geschrieben hab.
Getrennt habe ich die Deklaration und Definition in einer .h Datei und .cpp Datei.

Ich habe nun in der .cpp Datei die .h Datei inkludiert und in der main.cpp möchte ich nun meine Klasse verwenden, also habe ich die .h Datei inkludiert, dennoch erhalte ich den Fehler, von nicht aufgelösten Symbolen, also ein Linker error, was meines Wissens nicht vorkommen sollte, da ich ja die Definition an die Deklaration gehängt hab :D .

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

03.01.2015, 13:37

Ohne Code und exakte Fehlermeldung kann man dazu nichts weiter sagen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

03.01.2015, 13:48

Ohne Code und exakte Fehlermeldung kann man dazu nichts weiter sagen.

Ich bitte um Verzeihung


Game.h in etwa so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef Game_H
#define Game_H
#include <fstream>
#include <vector>
#include <string>
#include "SFML\System.hpp"
#include "SFML\Graphics.hpp"
#include "SFML\Audio.hpp"
namespace Game{
    namespace Graphics{
    //diverse Klassen

}
}
#endif





Game.cpp in etwa so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
#include "Game.h"
//Tile--------------------------------------------------------------------

template<int Size>
sf::Texture& Game::Graphics::Tile<Size>::getTexture()
{
   //Hier steht irgendein Quellcode
}


Main.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
#include "Game.h"

int main()
{
    Game::Graphics::Tile<32> Map;
}





exakte Fehlermeldung:
main.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall Game::Graphics::Tile<32>::Tile<32>(void)"(??0?$Tile@$0CA@@Graphics@Game@@QAE@XZ)".(??0?$Tile@$0CA@@Graphics@Game@@QAE@XZ)".

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

03.01.2015, 14:08

Der Code is eher ein schlechter Witz, weil alles fehlt, was es natürlich schwierig macht das zu sehen, was Du vergessen hast. Die Fehlermeldung jedoch sagt, dass Du einen Konstruktor deklariert, aber nicht definiert hast. Mögliche Ursache ist die Verwendung eines Templates mit der Implementierung in der *.cpp Datei. Das wäre falsch, die gehört im Falle eines Templates in die *.hpp. Vielleicht hast Du auch Fehler bei der Verwendung des Namespaces gemacht. Lässt sich alles kein Stück beurteilen, wenn Du uns davon nichts zeigst.
Wieso Du da überhaupt Templates einsetzt, das ist mir unklar. Sinnvoll wäre wohl, dass ein Tile ein einziges Ding ist und nicht eine Menge von Dingen. Ein Tile. Ein Array von Tiles oder ein Vektor von Tiles. Aber nicht "ein Tile ist eine Menge von Tiles". Eine Map wäre eine Menge von Tiles: std::array<Game::Graphics::Tile, 32> Map.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

5

04.01.2015, 01:23

Der Code is eher ein schlechter Witz, weil alles fehlt, was es natürlich schwierig macht das zu sehen, was Du vergessen hast. Die Fehlermeldung jedoch sagt, dass Du einen Konstruktor deklariert, aber nicht definiert hast. Mögliche Ursache ist die Verwendung eines Templates mit der Implementierung in der *.cpp Datei. Das wäre falsch, die gehört im Falle eines Templates in die *.hpp. Vielleicht hast Du auch Fehler bei der Verwendung des Namespaces gemacht. Lässt sich alles kein Stück beurteilen, wenn Du uns davon nichts zeigst.
Wieso Du da überhaupt Templates einsetzt, das ist mir unklar. Sinnvoll wäre wohl, dass ein Tile ein einziges Ding ist und nicht eine Menge von Dingen. Ein Tile. Ein Array von Tiles oder ein Vektor von Tiles. Aber nicht "ein Tile ist eine Menge von Tiles". Eine Map wäre eine Menge von Tiles: std::array Map.
Tatsache...es lag an den Templates...vielen Dank erstmal. Ich wollte nicht viel Code posten, weil ich dachte, dass es zu viel wäre.
Dennoch...jetzt funktioniert es und ich bedanke mich nochmals herzlich.

Werbeanzeige