我正在尝试为我的高中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(char16 *)':错误:在将字符赋值给char时不兼容的类型”,还有这个错误:“在成员函数char room::get_desk()中:错误:从char*到char的转换无效”。
我需要字符有一个16的数组,但是如果我从char desk[16];中删除16,错误就会消失
发布于 2011-11-02 10:10:57
你不能把指针赋给那样的数组。这里有一种让它工作的方法。
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++中使用字符串或矢量,而不是字符数组和指针。
*类定义后还缺少分号。
下面是一种更像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;
}发布于 2011-11-02 11:07:50
您不需要在每个引用desk的前缀都加上room::
strncpy(desk,a,sizeof(desk)-1);
desksizeof(书桌)-1= 0;
使用以上设置,您可以安全地更改办公桌的大小。
将getter的返回类型更改为char*
https://stackoverflow.com/questions/7975072
复制相似问题