用指针传递C ++的Char

时间:2014-03-24 11:26:49

标签: c++ oop 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(&#39; DISE&#39;,20000,30); &#34;非常量左值引用类型&#39; char&#39;不能绑定到类型&#39; int&#39;&#34;

的类型

4 个答案:

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

直播on Coliru