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

28.02.2012, 00:24

SFML Klassenproblem, was muss ich denn noch ausprobieren -.-

Hallo.
Ich checke das nicht.

Ich habe mir 2 Klassen definiert.
Creature wo halt die Basics stehen wie Health und Mana usw.
Danach Player abgeleitet von Creature.

Creature sieht so aus

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
#include <string>

class Creature
{
protected:
    sf::String Name;
    int Health;
    int Mana;
    int Level;
    int Typ;

public:
    
    Creature(std::string ansiString);
    Creature(std::string ansiString, int Level, int Health, int Mana = 0);
    ~Creature(void);
};


und Player

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pragma once
#include <SFML/Graphics.hpp>
#include "Creature.h"
#include <string>

class Player : public Creature
{
    int Klasse;
    sf::Sprite PlySpr;

public:

    Player(std::string& ansiString, sf::Sprite PlySpr, int Klasse, int Level = 1, int Health = 100, int Mana = 100);
    operator std::string() const;
    ~Player(void);
};


Aber wenn ich das hier mache:

C-/C++-Quelltext

1
Player P1("MaZy", playerImg, 1);

Fehler ist der String. Da steht als Tooltip:

Zitat

"Error: Keine Instanz des Konstruktors ""Player::Player"" stimmt mit der Argumentliste überein"


Ich hab schon alles was von der offziellen sfml header datei ausprobiert.. keine will davon funktionieren. Und ich kann ja leider auch nicht Player(sf::String String... machen da meckert es nur rum.. und sagt z.B. dass creature kein member von creature wäre...
hilfe.

PS: Wunder euch net, wenn euch was dummes auffällt. Ich hab dann hoffnungslos herumprobiert :dash:
Nichts ist unmöglich.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MaZy« (28.02.2012, 19:21)


Counterfeit

Frischling

Beiträge: 32

Beruf: Softwareentwickler

  • Private Nachricht senden

2

28.02.2012, 09:46

C-/C++-Quelltext

1
Player P1(std::string("MaZy"), playerImg, 1);


Das "Problem" ist du verlangst von deiner Player-Klasse den Namen als Adresse eines Zeigers. Entweder übergibst du std::string ohne & oder du schreibst das wie oben.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

3

28.02.2012, 13:02

Das "Problem" ist du verlangst von deiner Player-Klasse den Namen als Adresse eines Zeigers. Entweder übergibst du std::string ohne & oder du schreibst das wie oben.

Adresse eines Zeigers? Das wäre ja ein Zeiger auf ein Zeiger... und einen String call by value entgegen zu nehmen ist auch nicht so klug...

@MaZy: schreibs einfach so wie counterfeit.
Von welchem Typ ist playerImg? Wenn es ein Sprite ist, ist nicht nur der Bezeichner falsch, sondern auch die Idee schlecht das Sprite zu übergeben. Ist es ein Image musst du auch ein Image(genauer eine Referenz) entgegen nehmen. Das würde ich dir sowieso empfehlen.

Wofür benötigst du den: operator std::string() const;?

Beschäftige dich lieber noch ein bisschen mit den Grundlagen. sf::string wäre hier, je nach SFML Version, überhaupt nicht angebracht. Das "hoffnungslose herumprobieren" ist ein Zeichen dafür, dass du zu wenig Theorie gemacht hast.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

4

28.02.2012, 19:18

Das ist es ja. Als aller erstes hab ich mit sf::String versucht (siehe unten) und auch ohne & also ohne auf Zeiger aufzufordern.
z. B.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "Player.h"

Player::Player(sf::String String, sf::Sprite PlySpr, int Klasse, int Level = 1, int Health = 100, int Mana = 100)
    : Creature(String, Level, Health, Mana)
{
    this->Klasse        = Klasse;
    this->PlySpr        = PlySpr;
}


Player::~Player(void)
{

}


Aber dann kam genauso wie in meinem Post zitiert die Fehlermeldung.

das mit const und & hab ich einfach von String.hpp von sfml abgeguckt. Weil ich nicht weiter wusste hab ich versucht von dort einen Constructor zu "kopieren" bzw. nach zu bilden :dead:
Deswegen hab ich ja vorsichtig darauf hingewiesen, dass es zur Zeit chaotisch aussieht.

mein playerImg ist sf::Texture typ. Also

C-/C++-Quelltext

1
sf::Texture playerImg;

Da ich erst sf::Image benutzt habe ist der name noch so geblieben.

EDIT: Ok verstehe was du meinst Nachoman. Ich habe es erst nicht gemerkt (bezogen auf playerImg) :)
EDIT: GELÖST

Fehler war, dass ich in Creature.cpp das hier stehen hatte: #include <SFML/Graphics.hpp>
Darum sagte es immer "Creature ist kein member von Creature".

Jetzt funktioniert es.

Btw:
Ich habe schon ein wenig Ahnung. Es ist nicht so, dass ich Bild los programmiere. Aber, wenn ich persönlich ganze Zeit ein Fehler wie in diesem Fall der Fehler mit include nicht erkenne greift ich auch mal auf dumme Mitteln zu.

Btw2:
Danke NachoMan auf den hinweis mit playerImg. Sonst hätte überhaupt nicht bemerkt.
habs nun so falls du ncoh tipps hast

C-/C++-Quelltext

1
Player::Player(sf::String String, sf::Texture Tx, int Klasse, int Level = 1, int Health = 100, int Mana = 100)
Nichts ist unmöglich.

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »MaZy« (28.02.2012, 19:35)


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

5

03.03.2012, 10:56

Du solltest zusammengesetze Datentypen immer als (konstante) referenz übergeben. Ansonsten werden sie kopiert (was sehr lang dauern kann) und nach dem Konstruktor wieder zerstört. Wenn du in der Zwischenzeit eine Referenz oder einen Zeiger auf die Objekte erzeugst werden diese ungültig.
(const sf::String& String, const sf::Texture &Tx, const int Klasse, const int Level = 1, const int Health = 100, const int Mana = 100) wären die richtigen Parameter...
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige