首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >char*和char[]数组错误

char*和char[]数组错误
EN

Stack Overflow用户
提问于 2011-11-02 10:07:56
回答 2查看 1.2K关注 0票数 3

我正在尝试为我的高中c++课程制作的一个游戏创建一个类。我的所有集合函数都不起作用。我将发布一个定制的示例来展示一个(我得到的所有错误都是相同的)。以下是问题所在:

代码语言:javascript
复制
#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,错误就会消失

EN

回答 2

Stack Overflow用户

发布于 2011-11-02 10:10:57

你不能把指针赋给那样的数组。这里有一种让它工作的方法。

代码语言:javascript
复制
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++的方法:

代码语言:javascript
复制
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;
}
票数 6
EN

Stack Overflow用户

发布于 2011-11-02 11:07:50

您不需要在每个引用desk的前缀都加上room::

strncpy(desk,a,sizeof(desk)-1);

desksizeof(书桌)-1= 0;

使用以上设置,您可以安全地更改办公桌的大小。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7975072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档