簡體   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