這種結構定義
struct message{
char msg[];
};
是錯誤的引入數據,因爲MSG的類型不完整。數組的大小是未知的。
此外,數組還沒有賦值運算符。所以,你可能不寫這樣
messag[0].msg[]={ 'a', 't','\r', '\n'};
(這種說法只是syntaxically不正確的)或
messag[0].msg={ 'a', 't','\r', '\n'};
你可以使用的最後一條語句,如果味精定義應該像std::array<char, 4>
。例如,
#include <array>
//...
struct message
{
std::array<char, 4> msg;
};
如果在編譯時未知數組大小,那麼您需要動態分配數組。例如,你可以使用智能指針std::unique_ptr
。
這裏是一個示範項目
#include <iostream>
#include <memory>
struct message
{
std::unique_ptr<char[]> msg;
};
int main()
{
message message[2];
message[0].msg.reset(new char[4] { 'a', 't','\r', '\n' });
return 0;
}
另一種方法是使用標準的類std::string
。例如
#include <string>
struct message
{
std::string msg;
};
int main()
{
message message[2];
message[0].msg = { 'a', 't','\r', '\n' };
return 0;
}
這是無效的C++。類數據成員必須具有完整的類型。 –
你應該爲這部分使用['std :: copy()'](http://en.cppreference.com/w/cpp/algorithm/copy):'messag [0] .msg [] = {'a ','t','\ r','\ n'};'。該語法僅適用於編譯時初始化。 –
究竟是什麼問題? – Codor