Wie initialisieren Sie ein const char-array Daten-member mit C++?
Ich habe eine Frage in Bezug auf C++ - Klassen-member-Initialisierung. Der folgende code veranschaulicht meine Frage:
class ABCD
{
public:
ABCD():ObjNum(3){};
~ABCD() {};
static const unsigned char getByte[8];
const int ObjNum;
};
const unsigned char ABCD::getByte[8] = {
'a','b','c','d','e','f','g','h'
};
int main()
{
ABCD test;
cout<<test.getByte[3]<<endl;
return 0;
}
Den oben genannten codes funktionieren sehr gut, aber jetzt, wenn ich mich nicht festlegen getByte[8] als statische, wie konnte ich das initialisieren der Klasse? Ich habe versucht auf diese Weise, aber nicht:
class ABCD
{
public:
ABCD():ObjNum(3),getByte('a','b','c','d','e','f','g','h')
{
};
~ABCD() {};
const unsigned char getByte[8];
const int ObjNum;
};
int main()
{
ABCD test;
cout<<test.getByte[3]<<endl;
return 0;
}
Die Fehler, die ich erhalten haben, ist wie folgt:
error C2536: 'ABCD::ABCD::getByte' : cannot specify explicit initializer for arrays
Ich verstehen, der Grund, warum ich die Fehlermeldung kam, aber ich weiß nicht, wie es zu lösen ist. Irgendeine Idee? Danke!
Brauchen Sie wirklich ein char-array? Es ist besser, std::string. Wenn Sie C++11 Sie haben auch std::array, können Sie eine Initialisierung mit std::initializer_list.
Was ist falsch mit dem ersten code und warum willst du es ändern?
stackoverflow.com/questions/3878670/...
Es ist nichts falsch mit dem ersten code, und es ist nur aus Neugier.
Was ist falsch mit dem ersten code und warum willst du es ändern?
stackoverflow.com/questions/3878670/...
Es ist nichts falsch mit dem ersten code, und es ist nur aus Neugier.
InformationsquelleAutor feelfree | 2012-08-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
In C++11 können Sie initialisieren es so:
Wenn Sie gehen, um die C++11, aber es wäre besser, verwenden
std::array
als andere haben vorgeschlagen, in den Kommentaren. Man könnte dann definieren Sie das array wie:und initialisieren Sie es auf diese Weise (man beachte die doppelten Klammern):
In der Tat... die drei von uns gerade geschrieben die gleiche Lösung 🙂
und wenn ich nicht so langsam Tippen, es wäre mehr...
InformationsquelleAutor betabandido
In C++11 können Sie initialisieren arrays wie dieses:
InformationsquelleAutor Grzegorz Herman
Ist es besser aufzugeben C-arrays. In C++ ist es besser std::string. In diesem Fall:
In C++11 können Sie std::array und die Verwendung von std::initializer_list
InformationsquelleAutor
In C++03, die Sie ändern können, Mitglied zu werden, der Typ boost::array und initialisieren Sie im Konstruktor eine Funktion, die zurückgibt, die
boost::array<char,8>
.InformationsquelleAutor Alexander Chertov
Wenn Sie eine C++11-kompatiblen compiler, Sie sollten in der Lage sein zu verwenden, wie diese:
Aber wenn dein compiler nicht verarbeiten kann, müssen Sie initialisieren das array manuell in den Konstruktor, die entweder element von element oder durch ein anderes array und dann z.B.memcpy
.Edit: Wenn dein compiler cant handle der C++11-syntax ist, sind Sie ziemlich viel Pech. Jedoch, GCC seit mindestens der version 4.4, und auch VC++2010 behandeln. Also, wenn Sie Bedarf haben, zwingt Sie zur Verwendung von "alten" Compiler sollte es kein problem sein.
const
obwohl.InformationsquelleAutor Some programmer dude