[英]char* and a char[] array error
我正在尝试为我的高中c ++课程制作一个游戏课程。 我的所有设置功能都无法正常工作。 我将发布一个专门用于显示一个示例的示例(我得到了所有这些的相同错误)。 这是概率:
#include <iostream>
using namespace std;
class room {
public:
void set_desk(char *);
char get_desk();
private:
char desk[16];
}
int main {
room room1;
room1.set_desk("a desk");
cout << room1.get_desk();
return(0);
}
void room::set_desk(char *a){
room::desk = *a;
}
char room::get_desk(){
return(room::desk);
}
因此,当我尝试编译它时,我收到此错误:“在成员函数void room :: set_desk(char *)':错误:char与char [16]”的赋值不兼容类型“以及此错误:”在成员中function char room :: get_desk():error:从char *到char的无效转换“。
我需要char有一个16的数组,但如果我从char desk[16];
删除[16],错误就消失了char desk[16];
你不能像这样分配指向数组的指针。 这是让它发挥作用的一种方法。
void room::set_desk(char *a){
if (strlen(a) >= sizeof(desk)){
// Internal buffer is not large enough. Handle error.
}
strcpy(desk,a);
}
char* room::get_desk(){
return desk;
}
但是,你最好在C ++中使用字符串或向量而不是char数组和指针。
*在类定义之后,您还缺少分号。
这是一个更像C ++的方法:
class room {
public:
void set_desk(string);
string get_desk();
private:
string desk;
};
void room::set_desk(const string &a){
desk = a;
}
string room::get_desk(){
return desk;
}
int main {
room room1;
room1.set_desk("a desk");
cout << room1.get_desk();
return 0;
}
您不需要为每个对桌面的引用添加前缀::
函数strncpy(桌子,一个,的sizeof(台)-1);
desk [sizeof(desk)-1] = 0;
使用上面的内容,您可以安全地更改桌面的大小。
将getter的返回类型更改为char *
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.