Problem bei OOP in C++ : error C2248

DerSiebte

Mitglied
hi all..
ich habe gestern begonnen OOP in c++ zu lernen.
ich möchte ein Turnier mit Klassen programmieren. Jetzt bekomme ich aber in einer Funktion diesen "error C2248", 4 mal auf 2 Zeilen verteilt und jetzt weiss ich nicht mehr weiter:

error C2248: 'Mannschaft::m_Name' : cannot access private member declared in class 'Mannschaft'

Hier der Code:
Code:
void spielplan(Mannschaft Team[],int anzahl)
{
    int i= anzahl-1,ii=i-1,zahl=0,k=ii*i +1,spielnr=1,a=0,b=1;
    string spielstand;
    for(int Rücksp=0;Rücksp <2;Rücksp++)
    {
        for (int a=0;a<anzahl;a++)
        {
            for (int b=a+1;b<anzahl;b++)
            {	
                if (Rücksp==0)
                {				
/*error 1+2*/       cout<<"Hin-Spiel "<<spielnr<<": "<<Team[a].m_Name<<" vs "<< Team[b].m_Name<<" = "; 
                    cin>>spielstand;
                }
                else if(Rücksp==1)
                {
/*error 3+4*/       cout<<"Rueck-Spiel "<<spielnr<<": "<<Team[b].m_Name<<" vs "<<Team[a].m_Name<<" = ";
                    cin>>spielstand;
                } 
                else cout<<"Es ist ein Fehler aufgetreten!";
                spielnr++;				
            }
        }
    }
}

hoffe ihr könnt mir helfen?

lg
DerSiebte
 
Hi.

Ein wichtiges Konzept bei OOP ist die Datenkapselung. D.h. Attribute von Klassen sind private und können von außerhalb der Klasse selbst (und nicht mal in einer abgeleiteten Klasse) gelesen/geändert werden. (protected wäre natürlich auch möglich)

In deinem Code heißt das, dass du in der spielplan() Funktion das Attribute m_Name der Mannschaft Klasse nicht lesen darfst, da es private ist.

Um Attribute "von Außen" zu lesen/schreiben benötigt man so genannte getter/setter Methoden. D.h. für das Attribute m_Name würde man zwei Methoden implementieren:
C++:
class Mannschaft {
  ...
public:
  string getName() const {
    return m_Name;
  }

  void setName(const string& newName) {
    m_Name = newName;
  }
};
...
void spielplan(Mannschaft Team[],int anzahl)
{
   cout << Team[0].getName() << endl;
}
Dieses Konzept bietet einige Vorteile, z.B. muss man nicht unbedingt die setName Methode implementieren wenn der Name einer Mannschaft sich nicht ändern kann oder darf.

Gruß
 
achjaa.. Das mit dem private und puplic hab ich ganz vergessen.
Musste eben schonmal ein Turnier programmieren, aber diesen mit Strukturen und ich hab es von dort kopiert und hab nicht richtig überlegt.

Danke für den Hinweis!

DerSiebte
 
Zurück