用指针在C++中传递字符

Char passing in C++ with pointers

本文关键字:字符 C++ 指针      更新时间:2023-10-16

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::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();
}

在Coliru上实时观看。