簡體   English   中英

char *和char []數組錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM