Probleme mit meiner Klasse

Der_Graf84

Grünschnabel
Hallo erstmal!
Ist jetzt mein erste Betrag und das bestimmt mit nem blöden Anfängerfehler.
Habe folgendes gebastelt:

lass clQuestions
{
public:
char Question[250];
char first_response[50];
char second_response[50];
char third_response[50];
char fourth_response[50];
char fifth_response[50];

void output()
{
cout << Question;
}
};

int main()
{
int i;
clQuestions Questions;
Questions.Question = "Auto";

Questions.output();
cin >> i;

}

Bekomme aber dann leider folgende Fehlermeldung

error C2864: "clQuestions::Question": Nur statische konstante integrale Datenmember können innerhalb einer Klasse initialisiert werden.

Ich hoffe mir sagt jetz keiner wie duslig mein Fehler ist.
Danke jetzt schon.
 
Hi.

Bitte verwende Code-Tags für Code, keine Zitate. Also [code=cpp]...[/code] um den Code schreiben. Dann sieht es so aus:
C++:
class clQuestions
{
public:
  char Question[250];
  char first_response[50];
  char second_response[50];
  char third_response[50];
  char fourth_response[50];
  char fifth_response[50];

  void output()
  {
    cout << Question;
  }
};

int main()
{
  int i;
  clQuestions Questions;
  Questions.Question = "Auto";

  Questions.output();
  cin >> i;

}
Vorteile: Zeilennummern, Einrückungen bleiben erhalten, Syntaxhighlighting

Man kann Arrays nur initialisieren, man kann keine Arrays zuweisen:
C++:
char a1[50] = "aaa"; // OK
char a2[50];
a2 = "bbb"; // Fehler
Du kannst entweder einfach std::string verwenden (Vorteil: dynamische Größenanpassung) oder du mußt Stringfunktionen verwenden:
C++:
clQuestions Questions;
strcpy(Questions.Question, "Auto");
Allerdings widerspricht deine Klasse auch den Grundsätzen von OOP. Daten sollten niemals öffentlich sein. Du solltest getter und setter Methoden definieren.

Gruß
 
Danke euch erstmal für die schnelle Hilfe!
Hab mich jetz erstmal für die Stringfunktion entschieden.
Leider weiß ich noch nicht ob ich dadurch Nachteile habe.

Mache gerade meine ersten "richtigen" Schritte und hoffe das ich das raffe.
Denke dafür sind die eigenen Fehler am besten da.

Und an den Grundsätzen von OOP bin ich dran ;)
 
Der "Nachteil" zu std::string ist, dass du so an eine bestimmte Maximallänge der Strings gebunden bist.
Wenn du eine sehr große angibst, passt zwar mehr rein; es wird aber auch für nur einen Buchstaben immer der Speicher für alle verbraucht.

Man kann die Maximallänge wiederum schon je nach Bedarf ändern, ist aber im Vergleich zu std::string umständlich.
Dort geht das von selber.

Gruß
 
Zurück