Zum Inhalt springen

Masterklasse kann keine Methoden der Childklasse aufrufen


GeneralB

Empfohlene Beiträge

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..

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 Wochen später...

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 >_<'

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...