char *和char []数组错误

时间:2011-11-02 02:07:56

标签: c++ class char

我正在尝试为我的高中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 *)':error:char to char [16]”中的不兼容类型以及此错误: “在成员函数char room :: get_desk()中:错误:从char *到char的无效转换”。

我需要char有一个16的数组,但如果我从char desk[16];

中删除[16],错误就消失了

2 个答案:

答案 0 :(得分:6)

您不能将指针分配给这样的数组。这是让它发挥作用的一种方法。

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;
}

答案 1 :(得分:0)

您不需要使用room ::

为每个对桌面的引用添加前缀

函数strncpy(桌子,一个,的sizeof(台)-1);

desk [sizeof(desk)-1] = 0;

使用上述内容,您可以安全地更改桌面的大小。

将getter的返回类型更改为char *