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