Wie deklarieren Sie Arrays in einem C ++ - Header?
Dies ist verbunden mit einigen anderen Fragen, wie: dieseund einige meiner anderen Fragen.
In diese Frageund andere, die wir sehen, können wir deklarieren und initialisieren string-arrays in einen schönen Schritt, zum Beispiel:
const char* const list[] = {"zip", "zam", "bam"}; //from other question
Diese kann getan werden, in der Implementierung einer Funktion mit nicht zu stören, oder in den Körper ein .cpp-Datei, außerhalb jeder Rahmen.
Was ich will zu tun ist, um ein array wie dieses als Mitglied einer Klasse, die ich verwende, so etwas wie dieses:
class DataProvider : public SomethingElse
{
const char* const mStringData[] = {"Name1", "Name2", "Name3", ... "NameX"};
public:
DataProvider();
~DataProvider();
char* GetData()
{
int index = GetCurrentIndex(); //work out the index based on some other data
return mStringData[index]; //error checking and what have you omitted
}
};
Aber der compiler meckert und ich kann nicht scheinen, um herauszufinden, warum. Ist es möglich, deklarieren und initialisieren Sie ein array wie dieses in einem Schritt bei der definition einer Klasse? Gibt es alternativen, die besser sind?
Ich bin sicher, dies ist eine sehr Anfängerfehler, aber wie immer, Ihre Hilfe und Ihre Beratung ist sehr geschätzt.
Cheers,
xan
InformationsquelleAutor der Frage xan | 2008-11-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie das Schlüsselwort static und extern Initialisierung, um das array ein statisches Mitglied der Klasse:
In der header-Datei:
In der .cpp-Datei:
InformationsquelleAutor der Antwort Stefan Rådström
Den Grund kann man nicht erklären array (const char* []) ist, dass:
const char* []
sagt nicht aus, wieviel Platz der compiler reservieren muss für jede Instanz (das array ist deklariert als Instanz-variable).Außerdem werden Sie wahrscheinlich wollen, um das array statisch ist, da es im wesentlichen ein konstanter Wert.
InformationsquelleAutor der Antwort Carl Seleborg
Dies ist nicht möglich in C++. Sie können nicht direkt das array initialisiert. Stattdessen müssen Sie geben Sie die Größe, die es haben (4 in deinem Fall), und Sie haben das array initialisiert im Konstruktor der DataProvider:
Beachten Sie, dass Sie haben zu geben, auf der const-ness der Zeiger im array, da du nicht direkt das array initialisiert. Aber Sie müssen später die Zeiger auf die richtigen Werte, und damit die Zeiger müssen geändert werden.
Wenn Ihre Werte im array const dennoch, der einzige Weg ist, um ein statisches array:
Dass das statische array heißt, alle Objekte teilen, dass array. So haben Sie gerettet Speicher zu.
InformationsquelleAutor der Antwort Johannes Schaub - litb