繁体   English   中英

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

[英]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();
}

在 Coliru 上直播

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM