Zum Inhalt springen

Masterklasse kann keine Methoden der Childklasse aufrufen


Empfohlene Beiträge

Geschrieben

Hallo zusammen

Aus einem für mich unerfindlichen Grund kann ich aus meiner Klasse Person keine Methoden der davon erbenden Klasse Trader aufrufen.


class Person // Person ##################################################################################
{
//friend class Item;
//friend class Ort;
friend class Trader;

private:
int health;
int maxhealth;
int action;
int maxaction;
int attack;
int defence;
string name;
string ort;
int level;
int experience;
int money;
string item;
string say;
string waffe;
static int objectNumber;
public:
...
void lookAround(vector<Ort*> *arrOrt, vector<Person*> *arrPerson, vector<Trader*> *arrTrader, vector<Item*> *arrItem, Person *player)
{
...
cout << "Haendler: \n";
for (size_t i=0; i<arrTrader->size(); i++)
{
if (arrTrader->at(i)->getOrt() == ort)
{
cout << " " << arrTrader->at(i)->getName() << "\n";
check = 1;
}
}
if (check == 0)
{
cout << " Niemand hier...\n";
}
...
class Trader : public Person
{
friend class Person;
private:
vector<string> ware;
vector<int> preis;

public:
Trader(vector<string> war, vector<int> prei, string na, string o, string s) : Person(na, o, s)
{
ware = war;
preis = prei;
name = na;
ort = o;
say = s;
}
...
[/PHP]

Als Fehler wird mir angezeigt:

In der Zeile: [i]if (arrTrader->at(i)->getOrt() == ort)[/i]

invalid use of undefined typ 'struct' Trader

In der Zeile: [i]friend class Trader;[/i]

forward declaration of 'struct' Trader

In der Zeile: [i]cout << " " << arrTrader->at(i)->getName() << "\n";[/i]

nochmal invalid use of undefined typ 'struct' Trader

und die Fehlermeldung der friedclass-Zeile

woran liegt das? Ich kann Objekte anderer Klassen ohne Probleme in der Methode anzeigen lassen..

Geschrieben

Hi,

mmh....irgendwie kann das nicht gehen, denn bevor ein Trader erzeugt wird, muss ja erst eine Person erzeugt werden. Das geht aber nicht, wenn die Klasse Person einen Trader benötigt. Du müsstest eine Vorwärtsdeklaration außerhalb der Klassendefinition machen.

Sowas riecht aber meistens nach einem Designfehler.

Geschrieben (bearbeitet)

Trader und Personen werden aus .ini's erzeugt. Und zwar erst Trader, dann Personen. Sollte doch so stimmen, oder?

Bearbeitet von GeneralB
Geschrieben

Hi,

also von der Logik her: Wie soll denn ein Trader erzeugt werden, wenn als Basisklasse eine Person benötigt wird, die wiederum einen Trader benötigt? Ich muss zugeben, dass ich in C++ nicht mehr ganz drin bin, meines Verständnisses nach geht das nicht.

Selbst wenn das irgendwie kompiliert werden könnte, stellt sich immer noch die Designfrage. Ich würde vermutlich eher eine gemeinsame Basisklasse nehmen.

Geschrieben

Implementiere die Methoden nicht innerhalb der Klassendefinition, sondern trenne das sauber in .h (Klassendefinitoin) und .cpp (Methodendefinitionen) auf.

Dass eine Klasse ein Freund ihrer eigenen Basisklasse ist, halte ich übrigens für einen Designfehler. Dafür gibt es private, protected und public.

Geschrieben
Aus einem für mich unerfindlichen Grund kann ich aus meiner Klasse Person keine Methoden der davon erbenden Klasse Trader aufrufen.

Wie kommst du auf die Idee das das gehen sollte? Die Parent Klasse weiß logischerweiße nichts von irgendwelchen Klassen die von ihr erben.

  • 3 Wochen später...
Geschrieben

funktionieren sollte es, wenn du eine virtuelle (?) Methode in der Elternklasse schreibst und diese dann in der Kindklasse überschreibst. So würde ich es wenn dann machen.

Da ich seit längerem nicht mehr so intensiv mit Vererbung gearbeitet habe muss ich sagen: Alles ohne Gewehr (*Peng*)!

edit: ghaa nich gesehen, dass das Thema schon a Monat alt is >_<'

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...