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

Anonymous

unregistriert

1

02.01.2006, 22:59

Funktion braucht Variablen von zwei Klassen

Hallo ,

ich habe zwei Klassen erstellt mit diversen Membervariablen. In einer der Klassen ist eine Funktion, die sowohl aus der eigenen als auch aus der anderen Klasse Werte braucht. Beim Kompilieren erhalte ich den Fehler, dass die Bezeichner aus der anderen Klasse nicht deklariert sind.

Hier nun mal die Deklaration meiner beiden Klassen:

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
class character
{
public:                                             //Membervariablen

int m_lifepoints;   
int m_strenght; 
int m_speed;
int m_cleverness;
int m_skill;    
int m_attack_training;  
int m_attack;                   
int m_defense_training;
int m_defense;                  
int m_magic_strenght;                           
    
character ();
int calculate_m_attack ();
int calculate_m_defense ();
};


class inventory
{
public:
int m_goldcoins;                    
string m_weapon;                    
int m_attack_value_weapon;              
string m_shoes;                 
int m_defense_value_shoes;              
string m_armor;                 
int m_defense_value_armor;                          

inventory();
};


Die Membervariablen werden dann mittels Konstruktoren initialisiert.

Nun die beiden Memberfunktionen aus der Klasse "character", die Membervariablen aus der Klasse "inventory" benötigen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
int character::calculate_m_attack ()
{   
m_attack = static_cast<int>(1.5 * (m_attack_value_weapon)) + ((m_strenght + m_speed +                           m_attack_training)/2);

    return m_attack;
}

int character::calculate_m_defense ()
{
m_defense = static_cast<int>(1.5 *(m_defense_value_shoes   + m_defense_value_armor)) + ((m_strenght +           m_speed +   m_defense_training) /2);

    return m_defense;
}


Wie kann in nun den beiden Funktionen die Variablen mitteilen (Zeiger[wenn ja ,wie?] oder muss ich die benötigten Variablen in die andere Klasse ebenfalls noch einfügen? [möchte wenn möglich keine Parameter als Zahl eingeben müssen])?

Warum gehen friend-klassen/funktionen nicht?

Danke im Vorraus für die Hilfe !!!

Anonymous

unregistriert

2

02.01.2006, 23:14

Warum gehen friend-klassen/funktionen nicht?
Wie gehen nicht? Türlich geht das?

In die Klasse:
friend void functionname (parameterblabla);

Anonymous

unregistriert

3

02.01.2006, 23:16

Will aber doch kein Parameterblabla

Anonymous

unregistriert

4

02.01.2006, 23:18

spacegaier
Tja ohne: Geht net, da nicht eindeutig genug. Ende der Diskusion.

Anonymous

unregistriert

5

02.01.2006, 23:48

Eine Frage noch dann werden ich dich für heute nicht mehr belästigen:

Wenn in die Möglichkeit mit den Funktionsparametern nehme muss ich diese dann explizit an geben (void name (1, 34)) oder reicht es wenn ich schreibe: void name (m_staerke, m_skill)?
???

Antworte möglichst nach Heiko Kalistas Motto: "Ein Listing sagt mehr als tausen Wort"

Danke !!!!!

CW_Kovok

Alter Hase

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

6

03.01.2006, 00:53

du kannst Funktionen auch mit classmembern aufrufen:

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
#include <iostream>

class irgendwas
{
public:

    irgendwas()
    {
        x = y = 3;
    }

    void zeigewerte(int a, int b);
    void zeigeklassenwerte(void);

private:

    int x, y;
};

void irgendwas::zeigewerte(int a, int b)
{
    std::cout<<a<<" "<<b<<std::endl;
}

void irgendwas::zeigeklassenwerte(void)
{
    this->zeigewerte(x, y);
}

int main(void)
{
    irgendwas a;
    a.zeigewerte(5, 6);
    a.zeigeklassenwerte();

    return 0;
}
Was es alles gibt, das ich nich brauche - Aristoteles

Anonymous

unregistriert

7

03.01.2006, 09:16

Zitat von »"spacegaier"«

Heiko Kalistas Motto: "Ein Listing sagt mehr als tausen Wort"
Sein Motto, seine Meinung - aber nicht meine.

Werbeanzeige