我的指针图像不清晰,字符传递函数。请任何人都可以告诉我我做错了什么以及关于指针的简短想法?例如:我应该在哪里使用它们等等...
#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(&#39; DISE&#39;,20000,30); &#34;非常量左值引用类型&#39; char&#39;不能绑定到类型&#39; int&#39;&#34;
的类型答案 0 :(得分:2)
在您的代码中,不需要指针。您应该使用std::string
:
#include <string>
...
string CName
...
void setData(const string& x,int y,int z){
CName = x;
并且在setData
调用中你应该使用双引号(用于字符串)而不是单引号(用于单个字符)。
答案 1 :(得分:0)
b1.setData('DISE',20000,30);
char只有一个char,如'D'
,如果你有多个char,那就是字符串,你需要将它作为"DISE"
传递
使用方法签名void setData(char &x,int y,int z)
,您只能传递char。那是一个角色。
答案 2 :(得分:0)
您应该将setData()
声明更改为void setData(const char *x,int y,int z)
正如您当前所做的那样,您期望引用单个char
作为参数,该参数不能用于指定指向字符数组的char*
指针。
此外,您还没有在通话中指定字符数组文字:
b1.setData('DISE',20000,30);
需要改为
b1.setData("DISE",20000,30);
// ^ ^
答案 3 :(得分:0)
setData
metod在这里完全没用。它的工作应该由构造函数完成,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();
}
直播on Coliru。