【发布时间】:2018-11-09 14:32:13
【问题描述】:
在我的 c++ 项目中,我有两个成员的班级。我遇到问题的 char 数组成员。
class frame_message
{
public:
explicit frame_message(const unsigned int id, const char data[]) :id_(id), data_{ *data }{};
// only the first char 'a' is copied to `data_`
char* get_data() { return data_; };
void get_data(char** data) { *data = data_; };
private:
unsigned int id_; char data_[8];
};
现在我想从 main 方法发送另一个用于初始化类数组的 char 数组。
main
{
char data[8]={'a','b','c'} // indexs 3 to 7 are '\0'
char data2[8];
char data3[8];
frame_message myMessage(0xF004,data); // the data is passed as "abc"
data2 = myMessage.get_data(); // analysis error
myMessage.get_data(&data3); // runtime exception
}
我应该如何使用发送给构造函数的数据数组来初始化类的私有成员?
对于get_data 函数也应该传递什么数据类型?
附言我是 c/c++ 新手,但对指针、引用尤其是 char 和 char* 感到困惑
【问题讨论】:
-
main缺少参数列表和返回类型。似乎没有任何理由在这里使用固定大小的 C 样式数组。只需使用std::string,您就不会遇到任何问题。 -
你有两个方法叫做 get_data 看起来第二个应该叫做 set_data ?
-
请记住,在您的情况下 *data = 'a' 当您可能需要数组的副本时。有两种方法可以做到这一点,你可以只给它数据的地址 - 即在你的构造函数中丢失 * 或者如果你想也将数据保留在 main 中以供以后使用,则执行 memcpy 或类似的操作。如果你只是给它地址,那么在一个地方修改它也会修改另一个地方。编辑:我刚刚注意到你使用了静态数组,所以仅仅分配地址是行不通的——你需要复制
标签: c++ arrays constructor