用指针在C++中传递字符
Char passing in C++ with pointers
Im有不清楚的指针图像和函数传递的字符。请有人告诉我哪里做错了,并简要介绍一下指针的概念?我应该在哪里使用它们,等等…
#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
调用中,应该使用双引号(用于字符串(而不是单引号(用于单个字符(。
您应该将setData()
声明更改为void setData(const char *x,int y,int z)
正如您当前所做的那样,您希望引用单个char
作为参数,该参数不能用于分配指向字符数组的char*
指针。
此外,您没有在调用中指定字符数组文字:
b1.setData('DISE',20000,30);
需要更改为
b1.setData("DISE",20000,30);
// ^ ^
b1.setData('DISE',20000,30);
char只是一个char,就像'D'
一样,如果有多个char,也就是字符串,则需要将其作为"DISE"
传递
使用方法签名void setData(char &x,int y,int z)
,您只能传递char。这是一个角色。
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();
}
在Coliru上实时观看。
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在C++中从字符串中分割字符
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 指向指向字符数组的指针数组的指针
- 如何用转义符替换字符串中的所有特殊字符
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 比较字符数组
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存