2014-03-27 106 views
0

我在我的類中遇到了構造函數的錯誤。Char到char * C++

在我的cpp文件我有:

Player::Player() 
{ 

    m_name="Jane"; 
    m_amt=100; 
} 

,在我的.h文件中我有:

// Default constructor, does nothing. 
    Player(); 

    // Creates a Player. Player name and amount. 
    Player(const char &name, int amt); 

,我發現了錯誤:

error: invalid conversion from ‘const char*’ to ‘char’ [-fpermissive] 
    m_name="Jane"; 

所以我試圖將其轉換爲*char但仍然無法正常工作。有人可以幫忙嗎?

+1

'爲const char&'是到*單個字符*的參考,而不是他們的陣列。 – Wyzard

+0

我會擺脫'const'嗎? – user1985351

+0

這仍然是對單個字符的引用。 –

回答

4

您可以乘坐指針:

Player(const char* name, int amt) { ... } 

,你可以使用std::string存儲的名稱,並使用char*只是爲了構建這個字符串:

private: 
    std::string m_name; 
public: 
    Player(const char* name, int amt) : m_name(name) { } 

或者只是使用std::string無處不在,通通過參考以避免創建多餘的副本:

private: 
    std::string m_name; 
public: 
    Player(const std::string& name, int amt) : m_name(name) { } 

注意,最後的版本是很靈活的,它可能還通過const char*給它,例如:

#include <iostream> 
#include <string> 

class Player { 
private: 
    std::string m_name; 
public: 
    Player(const std::string& name) : m_name(name){} 
    void printName() { std::cout << m_name; } 
}; 

int main() { 
    Player p("Liho"); 
    p.printName(); 
} 
0

顯示您的滿級/代碼。以下編譯對我來說很好。

CPP文件...

#include"player.h" 

Player::Player() 
{ 
    m_name="Jane"; 
    m_amt=100; 
} 

h文件...

class Player { 

public: 
     // Default constructor, does nothing. 
     Player(); 

     // Creates a Player. Player name and amount. 
     Player(const char *name, int amt); 

private: 
     char* m_name; 
     int m_amt; 

}; 
+0

將字面賦值給char * – codah

+0

@codah它呢? – cedoc