Initialisierung eines Arrays von structs in C++
Wenn ich einen struct wie folgt:
typedef struct MyStruct {
char **str;
int num;
} MyStruct;
Gibt es eine Möglichkeit für mich, um ein array zu initialisieren dieser Strukturen. Vielleicht wie folgt:
const MyStruct MY_STRUCTS[] = {
{
{"Hello"},
1
},
{
{"my other string"},
3
},
};
Letztendlich würde ich gerne eine ständig deklariertes array von Strukturen innerhalb einer C++ - Klasse. Wie kann das getan werden? Ist es möglich, ein privat deklariert-Mitglied, das die pre-initialized?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sicher, würden Sie schreiben es so:
Es sei denn, ich bin Missverständnis und Sie wirklich wollen einfach nur
num
zum zählen der Anzahl der Elemente. Dann sollten Sie einfach haben:Und Sie wiederherstellen können die element-Größe mit
data[0].size()
,data[1].size()
usw.Wenn alles statisch bestimmt und Sie wollen einfach nur ein kompaktes Nachschlagewerk, müssen Sie noch bereitstellen von Speicherplatz, aber alles ist praktisch die gleiche wie in C:
Da die Größe ist
std::distance(std::begin(a0), std::end(a0))
Sie vereinfachen könnten, indem Sie den letzten Teil mit einem makro, das dauert nura0
als argument. Und statt der HandschriftFoo
, könntest du einfachstd::pair<char const **, std::size_t>
.vector
und einstring
zu tun? Gibt es keine Möglichkeit, dies zu tun mit nurchar**
- und c-arrays?std::vector
statt einen Zeiger auf ein array, undstd::string
statt einen Zeiger auf char), aber ich habe gerade bemerkt, dass die Frage angegebenen c-style-stringsstd::vector
verwaltet automatisch seinen Speicher (Das ist, kein Handbuch-leak-prone-Speicher-management). Das gleiche fürstd::string
. Wenn Sie die c-Stil-string, den Sie verwenden konnten,std::string::c_str()
Funktion (Lange Antwort 🙂 ).char[N]
, wobei N die Länge des Strings), und ein array ist ein array, und nicht einen Zeigerstatic
- Schlüsselwort anstelle von Unbenannte namespace.Du meinst so etwas wie dieses:
//In irgendeinem headerfile:
//in einigen .cpp-Datei:
Dass setzt allerdings Voraus, dass Sie eine
char *str;
, dachar **str;
erfordert eine sekundäre variable nehmen Sie die Adresse aus. Oder, Sie könnte verwendenstd::vector<string>
, und das würde das problem lösen.static
mit nur einer dimension. Ich bin mir aber nicht 100%.Cannot initialize a member subobject of type 'const char **' with an lvalue of type 'const char [11]'
vector<string>
oder Sie müssen erklären, eine separate variableconst char *str1[] = { "x", "y" };
und verwendenstr1
als input fürMY_STRUCTS
.Können Sie so etwas wie
vorausgesetzt, Sie
struct
's erste Mitglied ist eigentlichchar const*
eher alschar**
als Sie die Initialisierung Beispiel suggeriert.char
statt: das ist nur die normale Initialisierung Regeln.