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

MrZylox1998

Treue Seele

  • »MrZylox1998« ist der Autor dieses Themas

Beiträge: 186

Wohnort: Bayern

Beruf: Schüler(9.Klasse)

  • Private Nachricht senden

1

23.09.2013, 17:04

[C++]Klassen getter und setter

Hallo zusammen,
ich habe hier ein Problem, ich habe eine Klasse mit getter und setter erstellt, nun möchte ich aber eine variable von der Klasse in einer anderen Klasse benutzen, der getter funktioniert hierbei aber nicht.
Wenn die Variable public ist funktioniert es auch nicht :s
Ich weiß ich beherrsche die Grundlagen noch nicht werde mir auch noch ein paar Bücher bestellen.

PS: In Google habe ich auch schon gesucht

Vielen Dank
Jetzt -- ist schon vorbei.

Rechtschreibfehler sind Spezialeffekte meiner Tastatur!

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »MrZylox1998« (23.09.2013, 17:34)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

23.09.2013, 18:42

Was genau bedeutet "funktioniert nicht"?

MrZylox1998

Treue Seele

  • »MrZylox1998« ist der Autor dieses Themas

Beiträge: 186

Wohnort: Bayern

Beruf: Schüler(9.Klasse)

  • Private Nachricht senden

3

23.09.2013, 18:46



Was genau bedeutet "funktioniert nicht"?
Oh tut mir leid, Ich habe in der Header Datei die andere Klasse eingebunden und wenn ich den getter aufrufe sagt IntelliSense: Ein nicht statischer Memberverweis muss relativ zu einem bestimmten Objekt sein.
Jetzt -- ist schon vorbei.

Rechtschreibfehler sind Spezialeffekte meiner Tastatur!

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

23.09.2013, 19:17

Was könnte das Deiner Meinung nach denn bedeuten?
Was ist denn "statisch", was ist ein "Objekt" und was ist ein "Member"?
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]

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

MrZylox1998

Treue Seele

  • »MrZylox1998« ist der Autor dieses Themas

Beiträge: 186

Wohnort: Bayern

Beruf: Schüler(9.Klasse)

  • Private Nachricht senden

6

23.09.2013, 20:26

Nun habe ich die variablen und getter static gemacht, aber es kommen immernoch fehler wie
-"Es fehlt ";" vor ".",
-Links von ".getGold" muss sich eine Klasse/Struktur/Union befinden - Dort ist aber eine Klasse.
-Oder Das Token "." ist nach UDT "CMeineKlasse" illegal.
-Siehe deklaration von "CMeineKlasse"

Tut mir leid für meine blödheit. :pinch:
Jetzt -- ist schon vorbei.

Rechtschreibfehler sind Spezialeffekte meiner Tastatur!

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MrZylox1998« (23.09.2013, 20:33)


patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

7

23.09.2013, 20:32

Die Getter und Setter gehören nicht statisch! Wie wäre es, wenn du mal etwas Beispielcode postest, denn die Glaskugelreinigung ist letztens abgebrannt, als ich dort meine zur Reinigung hatte.

MrZylox1998

Treue Seele

  • »MrZylox1998« ist der Autor dieses Themas

Beiträge: 186

Wohnort: Bayern

Beruf: Schüler(9.Klasse)

  • Private Nachricht senden

8

23.09.2013, 20:38

goldmine.h


#ifndef GOLDMINE_H
#define GOLDMINE_H

#include <SFML\Graphics.hpp>
#include <iostream>
#include <sstream>
#include "shop.h"

using namespace sf;

class CGoldmine
{
public:
void Update (RenderWindow &window);
void Render (RenderWindow &window);
static int getGold ();
static int getGps ();
static int getClickGold ();
static void setGold (int var);
static void setGps (int var);
static void setClickGold (int var);

CGoldmine (String tex);

Sprite goldmine;
private:
static Texture Textur;

Clock gpsClock;
Clock GoldAboveMouseClock;
Clock MouseTimer;

static int Gold;
static int gps;
static int clickGold;

bool GoldAboveMouseBool;
bool Clicked;

Text GoldText;
Text GoldPerSecond;
Text GoldAboveMouse;

std::stringstream gss;

std::stringstream gpsss;

std::stringstream gamss;
};

#endif

goldmine.cpp


#include "goldmine.h"

Texture CGoldmine::Textur;

CGoldmine::CGoldmine(String tex)
{
Textur.loadFromFile(tex);
goldmine.setTexture(Textur);
goldmine.setPosition(300, 200);

Gold = 0;
gps = 1;
clickGold = 1;
GoldAboveMouseBool = false;
Clicked = false;

GoldPerSecond.setPosition(0, 100);
}

void CGoldmine::Update(RenderWindow &window)
{
if (gpsClock.getElapsedTime().asSeconds() > 1)
{
Gold = (Gold += gps);
gpsClock.restart();
}

if (sf::Mouse::isButtonPressed(sf::Mouse::Left) && sf::Mouse::getPosition(window).x > 300 && sf::Mouse::getPosition(window).x < 450 && sf::Mouse::getPosition(window).y > 200 && Clicked == false && sf::Mouse::getPosition(window).y < 450 && Clicked==false && MouseTimer.getElapsedTime().asMilliseconds() > 5)
{
Gold = (Gold += clickGold);
GoldAboveMouseBool = true;
GoldAboveMouse.setPosition(sf::Mouse::getPosition(window).x, sf::Mouse::getPosition(window).y -10);
MouseTimer.restart();
}

if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
{
Clicked = true;
}
else
{
Clicked = false;
}

GoldText.setString ( gss.str().c_str() );
gss.str("");
gss << Gold;

GoldPerSecond.setString ( gpsss.str().c_str() );
gpsss.str("");
gpsss << gps;

GoldAboveMouse.setString ( gamss.str().c_str() );
gamss.str("");
gamss << clickGold;
}

void CGoldmine::Render(RenderWindow &window)
{
window.draw(goldmine);
if(GoldAboveMouseBool == true)
{
window.draw(GoldAboveMouse);
}
window.draw(GoldText);
window.draw(GoldPerSecond);
}

int CGoldmine::getGold()
{
return Gold;
}

int CGoldmine::getGps()
{
return gps;
}

int CGoldmine::getClickGold()
{
return clickGold;
}

void CGoldmine::setGold(int var)
{
Gold = var;
}

void CGoldmine::setClickGold(int var)
{
clickGold = var;
}

void CGoldmine::setGps(int var)
{
gps = var;
}

Ein teil von shop.cpp
...


void CShop::Update(RenderWindow &window)
{
if (sf::Mouse::getPosition(window).x > 650 && sf::Mouse::getPosition(window).y > 100 && sf::Mouse::getPosition(window).y < 125 && MouseTimer.getElapsedTime().asMilliseconds() > 100)
{
AddOneClickGoldCostBool = true;
if (sf::Mouse::isButtonPressed(sf::Mouse::Left) && CGoldmine.getGold() > AddOneClickGoldCost)
{
CGoldmine.setClickGold(CGoldmine.getClickGold() + 1);
CGoldmine.setGold(CGoldmine.getGold() - AddOneClickGoldCost);
AddOneClickGoldCost *= 2;
}
}
else
{
AddOneClickGoldCostBool = false;
}

...

PS: oh mein gott... Es tut mir seeehr leid für den verwirrenden code D:
Jetzt -- ist schon vorbei.

Rechtschreibfehler sind Spezialeffekte meiner Tastatur!

Dreat

Frischling

Beiträge: 86

Wohnort: Heilbronn

  • Private Nachricht senden

9

23.09.2013, 21:14

Kurz 2 Verbesserungsvorschläge, weil ich weiß das es eh kommt ^^

1. Benutze den C++ Codetag und wenn du den Beitrag schreibst nicht im Editor sondern im Quellcode Tab dann läufts auch mit der Formatierung ;D //Ich denke mal das sich so keiner dein Code ansehen wird/will
2. Bei dieser Masse an Code wäre es hilfreich zu zeigen wo die Fehler sind auch wenn sie vermeintlich offensichtlich sind, rückt den Fragenden einfach in ein besseres Licht, sonst sieht es so aus als würdest du den Code hinklatschen und sagen sucht den Fehler

Ansonsten statics weg, ich weiß ja nicht wie du deine Klasseninstanz in shop.cpp genannt hast aber ich gehe mal schwer davon aus das sie nicht CGoldmine heißt. Also ich denke du hast gar keine Instanz erstellt und versuchst jetzt direkt die Klasse zu nehmen?

CGoldmine.getGold() <- funktioniert so nämlich nicht.

CGoldmine goldMine;

goldMine.getGold() <- funktioniert

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

10

23.09.2013, 21:14

Ich habs mal in Code-Tags gestellt und die Einrückung korrigiert.

goldmine.h

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#ifndef GOLDMINE_H
#define GOLDMINE_H

#include <SFML\Graphics.hpp > 
#include <iostream> 
#include <sstream> 
#include "shop.h"

using namespace sf;

class CGoldmine {
    public: 
    void Update(RenderWindow & window);
    void Render(RenderWindow & window);
    int getGold();
    int getGps();
    int getClickGold();
    void setGold(int var);
    void setGps(int var);
    void setClickGold(int var);

    CGoldmine(String tex);

    Sprite goldmine;
    private: 
    static Texture Textur;

    Clock gpsClock;
    Clock GoldAboveMouseClock;
    Clock MouseTimer;

    int Gold;
    int gps;
    int clickGold;

    bool GoldAboveMouseBool;
    bool Clicked;

    Text GoldText;
    Text GoldPerSecond;
    Text GoldAboveMouse;

    std::stringstream gss;

    std::stringstream gpsss;

    std::stringstream gamss;
};

#endif


goldmine.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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include "goldmine.h"

Texture CGoldmine::Textur;

CGoldmine::CGoldmine(String tex) {
    Textur.loadFromFile(tex);
    goldmine.setTexture(Textur);
    goldmine.setPosition(300, 200);

    Gold = 0;
    gps = 1;
    clickGold = 1;
    GoldAboveMouseBool = false;
    Clicked = false;

    GoldPerSecond.setPosition(0, 100);
}

void CGoldmine::Update(RenderWindow & window) {
    if (gpsClock.getElapsedTime().asSeconds() > 1) {
        Gold = (Gold += gps);
        gpsClock.restart();
    }

    if (sf::Mouse::isButtonPressed(sf::Mouse::Left) && 
        sf::Mouse::getPosition(window).x > 300 && 
        sf::Mouse::getPosition(window).x < 450 && 
        sf::Mouse::getPosition(window).y > 200 && 
        Clicked == false && sf::Mouse::getPosition(window).y < 450 && 
        Clicked == false && MouseTimer.getElapsedTime().asMilliseconds() > 5) 
    {
        Gold = (Gold += clickGold);
        GoldAboveMouseBool = true;
        GoldAboveMouse.setPosition(sf::Mouse::getPosition(window).x, sf::Mouse::getPosition(window).y - 10);
        MouseTimer.restart();
    }

    if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) {
        Clicked = true;
    } else {
        Clicked = false;
    }

    GoldText.setString(gss.str().c_str());
    gss.str("");
    gss << Gold;

    GoldPerSecond.setString(gpsss.str().c_str());
    gpsss.str("");
    gpsss << gps;

    GoldAboveMouse.setString(gamss.str().c_str());
    gamss.str("");
    gamss << clickGold;
}

void CGoldmine::Render(RenderWindow & window) {
    window.draw(goldmine);
    if (GoldAboveMouseBool == true) {
        window.draw(GoldAboveMouse);
    }
    window.draw(GoldText);
    window.draw(GoldPerSecond);
}

int CGoldmine::getGold() {
    return Gold;
}

int CGoldmine::getGps() {
    return gps;
}

int CGoldmine::getClickGold() {
    return clickGold;
}

void CGoldmine::setGold(int var) {
    Gold = var;
}

void CGoldmine::setClickGold(int var) {
    clickGold = var;
}

void CGoldmine::setGps(int var) {
    gps = var;
}


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
void CShop::Update(RenderWindow & window) {
    if (sf::Mouse::getPosition(window).x > 650 && sf::Mouse::getPosition(window).y > 100 && sf::Mouse::getPosition(window).y < 125 && MouseTimer.getElapsedTime().asMilliseconds() > 100) {
        AddOneClickGoldCostBool = true;
        if (sf::Mouse::isButtonPressed(sf::Mouse::Left) && CGoldmine.getGold() > AddOneClickGoldCost) {
            CGoldmine.setClickGold(CGoldmine.getClickGold() + 1);
            CGoldmine.setGold(CGoldmine.getGold() - AddOneClickGoldCost);
            AddOneClickGoldCost *= 2;
        }
    } else {
        AddOneClickGoldCostBool = false;
    }
  //..
}


Soo, dein Problem ist, dass due in shop.cpp schreibst

C-/C++-Quelltext

1
CGoldmine.setClickGold(/*...*/);

Ich denke mal nicht, dass du eine Variable mit dem Namen CGoldmine in CShop hast, sondern versuchst die Klasse direkt anzusprechen. Die Lösung ist es, eben eine Variable in CShop anzulegen, die vom Typ CGoldmine ist und diese dann in der Update-Methode anzusprechen. Und noch etwas: lass das C-Prefix weg, es ist einfach nur unnötig Klassen so zu kennzeichnen. Zudem macht das heute keiner mehr.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// HEADER-DATEI
class Shop
{
    public:
        /* ... */
    private:
        /* ... */
        Goldmine m_goldmine;
}


// CODE-DATEI
void Shop::Update(sf::RenderWindow& window)
{
    /* .. */
    m_goldmine.setClickGold(/* .. */);
}

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »patrick246« (23.09.2013, 21:30)


Werbeanzeige