[英]Char passing in C++ with pointers
我有不清楚的指針和字符傳遞函數的圖像。 請任何人都可以告訴我我哪里做錯了以及關於指針的簡要想法?例如:我應該在哪里使用它們,等等......
#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); “對‘char’類型的非常量左值引用不能綁定到‘int’類型的臨時變量”
在您的代碼中,不需要指針。 你應該使用std::string
:
#include <string>
...
string CName
...
void setData(const string& x,int y,int z){
CName = x;
在setData
調用中,您應該使用雙引號(用於字符串)而不是單引號(用於單個字符)。
b1.setData('DISE',20000,30);
char 只是一個字符,比如'D'
,如果你有多個字符,那就是字符串,你需要把它作為"DISE"
傳遞
使用您的方法簽名, void setData(char &x,int y,int z)
您只能傳遞 char。 那是一個字符。
您應該將setData()
聲明更改為void setData(const char *x,int y,int z)
正如您目前正在做的那樣,您期望對單個char
的引用作為參數,它不能用於分配旨在指向字符數組的char*
指針。
您也沒有在調用中指定字符數組文字:
b1.setData('DISE',20000,30);
需要改為
b1.setData("DISE",20000,30);
// ^ ^
setData
方法在這里完全沒用。 它的工作應該由構造函數完成,並且name
變量(不應命名為CName
應該是std::string
viewIncome
應該自動調用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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.