2017-09-17 461 views
-2

我已經瀏覽了許多對此處其他人的回覆以及YouTube視頻,試圖找出我做錯了什麼。C++中的錯誤返回值與函數類型不匹配

我有一個定義的私有類成員作爲一個頭文件:

char *m_sName[64]; 

和公共構造和析構函數的重載的構造函數。

而在我的cpp文件這樣的:

Character::Character() 
{ 
    *m_sName = NULL; 
} 

Character::Character(char *name, int cl, int al, int hp, int str, int dex, int con, int itl, int wis, int chr) 
{ 
    *m_sName = new char[strlen(name) + 1]; 
    strcpy(*m_sName, name); 
} 

void Character::setName(char *name) 
{ 
    *m_sName[] = (char *)malloc(strlen(name) + 1); // Error expected a 
                //expression 
    strcpy(*m_sName, name); 
} 

void Character::getName(char *name) 
{ 
    char *name = new char[strlen(*m_sName) + 1]; 
    strcpy(name, *m_sName); 
    return name; // Error here return value type does not match function type 
} 

Character::~Character() 
{ 
    delete [] *m_sName; 
} 

現在,我明白,SNAME是一個數組,對方只是一個char。但即使我將它改爲雙倍,我也遇到同樣的問題。 setName中的其他問題我不知道如何解決它...

+1

你試圖返回一個返回類型爲void的函數。刪除返回語句。 另外,刪除大部分代碼並使用std :: string和std :: vector。如果你繼續這樣下去,你會遇到很多麻煩。最後,如果你通過教程或書籍來學習C++,請轉換你的文獻。沒有人應該再這樣寫代碼了。 – Jodocus

+0

對你的進一步的問題,因爲我顯然是新的,這是一個任務,如果他的主要不工作,那麼我會得到一個0.將使這些變化導致他不工作? –

+0

「他的主」是什麼意思? – melpomene

回答

0

你的代碼有很多問題。但是如果你只是想讓它工作,你可以試試這個:

void Character::setName(char *name) 
{ 
    delete [] *m_sName; // Avoid memory leak 
    *m_sName = (char *)malloc(strlen(name) + 1); // delete `[]' 
    strcpy(*m_sName, name); 
} 

char * Character::getName(char *name) // Change the return type 
{ 
    char *name = new char[strlen(*m_sName) + 1]; 
    strcpy(name, *m_sName); 
    return name; 
} 
+1

這不是我想讓它工作......我想以一種合理的方式來做到這一點。我認爲我沒有足夠的理解做出正確的選擇。 「一個名爲m_sName的字符數組,能夠容納多達64個字符」字符數組和std :: string只是不一樣的東西嗎? –

+0

一個字符數組是'char tmp [64];',而不是'char * tmp [64];'。後者是一個指向char數組的指針。 –

+0

對,我明白了。所以我的指令有char m_sName [64],並且有這個指針char * name。第一個是私人的,第二個是公開的。 *名稱應該是指向m_sName的指針嗎?所以我刪除了m_sName的所有'*'infront(他們不在那裏開始,我只是拼命嘗試任何可以閱讀我發現的其他解決方案的東西)現在我遇到M_sName必須是我可以修改的值它不可能是因爲它是私人的權利?這是私人和公衆的目的,所以我想。 –

相關問題