Initialize character-arrays in der Klasse
Wenn ich kompilieren Sie den folgenden code mit g++ 4.8.2 bekomme ich eine Fehlermeldung.
#include <iostream>
using namespace std;
class test {
public:
void print() {
cout << str << endl;
}
private:
char str[] = "123456789"; //error: initializer-string for array of chars
//is too long
};
int main() {
char x[] = "987654321";
cout << x << endl;
test temp;
temp.print();
}
Warum bekomme ich diesen Fehler, was ist der Unterschied zwischen str
in der Klasse test
und x
im main
Funktion?
- Sind Sie versuchen, initialisieren Sie ein array von C-style strings? Oder möchten Sie erstellen eine
char *
und ordnen Sie einen C-string? - Sie wissen
char str[10] = "123456789";
kompiliert wird , warum ? Denken ! Finden Sie Bücher ! - Ertönt der Fehlermeldung für diesen code:
error: array bound cannot be deduced from an in-class initializer
. Diese Einschränkung in C++ ist ein Sicherheits-feature, damit die Leute nicht versehentlich ändern, Klasse layout, ohne es zu merken. Verwenden Sie eine explizite gebunden. - In dieser situation, klammerten sich die Fehlermeldung ist viel einfacher zu verstehen, als g++'s.
- Ich möchte zum initialisieren der C-string.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Innerhalb Ihrer Klasse, Sie haben zu explizit geben Sie die array-Größe:
Oder Sie können einfach mit einem
std::string
(was ich denke ist in der Regel viel besser in C++ - code als mit raw C-style-strings):Kann man nicht haben-arrays unbekannter Größe in Strukturen/Klassen, die Sie benötigen, um ein array der Größe.
Oder besser noch, verwenden Sie
std::string
für Streicher. Es ist, was es gemacht.Merkte ich, was Sie Fragen, und schreiben Sie meine ganze Antwort.
Sie sollen nicht zu tun Sie die Initialisierung in der Klasse.
Nur deklarieren Sie die Variablen/Methoden, die Sie verwenden möchten.
Nur nach, dass Sie Ihre Klasse um Objekte zu erstellen.
Satz das Objekt die variable, die den Wert dann ab.
Zum Beispiel:
Jedoch, wenn Sie die Variablen auf private, müssen Sie eine Funktion erstellen, die in Ihrer Klasse für den Zugriff auf die Schüler. Zum Beispiel
setNum()
Alternativ können Sie die Variablen mit dem Konstruktor, und legen Sie es als parameter der Eingänge bei der Objekterstellung.
Wenn Sie wollen, um den Zugriff auf Klassen-member-Funktion, die Sie dies tun können, aber man muss natürlich definieren
setNum()
in Ihrer Klasse den ersten.Ich weiß, Sie werden Fragen, char[], aber ich gebe Sie z.B. auf int. Das ist nicht das problem in deinem code. Entweder int oder char[], sollten Sie vermeiden, deklarieren Sie es direkt in Ihre Klasse.
Wie es scheint, das größte problem mit deinem code ist nicht, ob Sie mit char[] oder char*.
Sie sollten nicht initialisiert werden, Ihre Werte in Ihrer Klasse.
Wenn Sie wirklich wissen, dass Sie nicht gehen, um die Zeichenfolge ändern und ist immer die gleiche, Sie können dies tun, anstatt
const char *str = "123456789";
Müssen Sie die Größe für char-arrays. Sie können einen Zeiger statt, wenn Sie nicht wissen, die Größe der Zeichenfolge oder seine Größe ist dynamisch. Wenn Sie dies tun, stellen Sie sicher, vergessen Sie nicht, fügen Sie eine null-Endzeichen.
Der Unterschied ist
Einer Instanzvariablen eines
char*
arbeitenchar* x = "foobar"
. Der compiler möglicherweise erlaubt die Methode, die variable gesetzt werden, um einechar[]
weil der Bereich begrenzt ist. Versuche Nachschlage-Literatur zu erklären, die eine unterschiedliche Behandlung.