2014-03-24 31 views
2

我有不清楚的指針和字符傳遞函數的圖像。請任何人都可以告訴我在哪裏即時做錯了,簡單說明關於指針例如:我在哪裏應該使用它們,等...在C++中用指針傳遞的字符

#include <iostream> 
using namespace std; 
class book{ 
private: 
    char *CName; 
    int CFee; 
    int NoPeople; 
    int Income; 
public: 
    void setData(char &x,int y,int z){ 
     CName = &x; 
     CFee = y; 
     NoPeople = z; 

    } 
    void calIncome(){ 
     Income = CFee * NoPeople; 

    } 
    void viewIncome(){ 
     cout<<Income; 
     cout<<CName; 

    } 
}; 
int main(){ 
    book b1; 
    b1.setData('DISE',20000,30); 
    b1.calIncome(); 
    b1.viewIncome(); 
} 

即時得到錯誤在此代碼

//b1.setData( 'DISE',20000,30); 「非const左值引用類型‘字符’不能綁定到類型‘詮釋’的temparory」

+1

πάνταῥεῖ答案是正確的,無論如何,因爲你使用的是C++而不是C,我強烈建議你使用包含sdt:string類的標準庫,它可以簡化字符的完全工作 – varantir

回答

0

你應該改變setData()聲明void setData(const char *x,int y,int z)

當你正在做你期待一個參考單個char作爲參數,它不能被用來指定一個char*指針指在一個符點陣列。

而且你沒有指定一個字符數組中調用文字:

b1.setData('DISE',20000,30); 

需要改變,以

b1.setData("DISE",20000,30); 
     //^^
+0

Hi ,我是這樣做的。但我得到另一個錯誤。看截圖https://www.dropbox.com/s/5czedhrmzrdci0o/Screenshot%202014-03-24%2017.21.10.png –

+0

@ImBatman對不起,要傳遞一個字符數組**文字**你需要有一個' const char *'當然是指針。還要注意,你需要提供一個數組分配和從參數中拷貝來保持你的類內部指針,然後聲明一個'const'通常是沒有意義的。修復了答案... –

+0

感謝它的工作。 –

0
b1.setData('DISE',20000,30); 

char是隻有一個字符,如'D',如果你有多個字符,即字符串,你需要通過它作爲"DISE"

與您的方法簽名void setData(char &x,int y,int z)你只能通過字符。那是一個角色。

+0

謝謝..我有想法 –

2

在你的代碼是沒有必要的指針。您應該使用std::string

#include <string> 
... 
string CName 
... 
void setData(const string& x,int y,int z){ 
    CName = x; 

setData叫你應該使用雙引號(這是字符串),而不是單引號(這是單個字符)。

+0

嗨,謝謝。但我沒有得到輸出。這是與Xcode有關的事情。這裏的截圖https://www.dropbox.com/s/nxeerxheryu7nr2/Screenshot%202014-03-24%2017.26.40.png –

+0

如果你唯一的意圖是存儲字符串,按值*傳遞它,並進入會員。 –

0

setData metod在這裏完全沒用。它的工作應該由一個構造函數來完成,而name變量(其不應該被命名爲CName應該是一個std::stringviewIncome應該自動調用calIncome和可能應該出臺一個骯髒的標誌,否則calIncome應該是一個自由/靜態函數和income成員應該被刪除的功能參數也應合理標題

而且我甚至可以回答這個問題:。

class Book { 
    std::string name; 
    int fee; 
    int noPeople; 
    int income; 

public: 
    Book(std::string name, int fee, int noPeople) : 
     name(std::move(name)), 
     fee(fee), 
     noPeople(noPeople) 
    { 
    } 

    void calIncome() { 
     income = fee * noPeople; 
    } 

    void viewIncome() { 
     calIncome(); 
     std:: cout << income << name; 
    } 
}; 

int main() { 
    Book b1 ("DISE", 20000, 30); 
    b1.viewIncome(); 
} 

觀摩on Coliru

+0

謝謝Bartek ..我們的講師一直使用char。從未使用過的字符串。現在我可以考慮使用字符串(開箱即用),謝謝 –