Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中传递字符+;带指针_C++_Oop_Pointers - Fatal编程技术网

C++ 在C+中传递字符+;带指针

C++ 在C+中传递字符+;带指针,c++,oop,pointers,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){

我对指针和函数传递的字符图像不清楚。请任何人都告诉我我哪里做错了,并简要介绍一下指针的概念?例如:我应该在哪里使用它们,等等

#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();
}
#包括
使用名称空间std;
课堂用书{
私人:
char*CName;
国际CFee;
int NoPeople;
国际贸易收入;
公众:
void setData(字符和x、整数y、整数z){
CName=&x;
CFee=y;
NoPeople=z;
}
void calIncome(){
收入=CFee*NoPeople;
}
无效收入(){
库特
char仅为一个char,如
'D'
,如果有多个char,即string,则需要将其作为
“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);
        // ^    ^

在代码中不需要指针。应该使用
std::string

#include <string>
...
string CName
...
void setData(const string& x,int y,int z){
  CName = x;
#包括
...
字符串CName
...
void setData(常量字符串&x,整数y,整数z){
CName=x;

setData
调用中,您应该使用双引号(用于字符串)而不是单引号(用于单个字符)。

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();
}
教材{
std::字符串名;
国际手续费;
int noPeople;
国际贸易收入;
公众:
图书(标准::字符串名称、整数费、整数人):
名称(标准::移动(名称)),
费(费),,
没有人(没有人)
{
}
void calIncome(){
收入=费用*没有人;
}
无效收入(){
calIncome();

std::coutπάνταῥεῖ 答案是正确的,不管怎样,因为你使用C++而不是C,我强烈建议你使用包含SDT类:String的标准库,它简化了与CARS TutalyHy的工作,我这样做了。但是我又得到了一个错误。/当然是代码>指针。还要注意的是,你需要提供一个数组分配并从参数中复制来保持类内部指针,然后声明一个
const
通常是没有意义的。修复了答案…嗨,谢谢。但是我没有得到输出。这与Xcode有关。如果你只想t是存储字符串,按值传递,然后移动到成员中。谢谢Bartek。我们的讲师总是使用char。以前从未使用过字符串。现在我也可以考虑使用字符串(开箱即用)谢谢Hanks。我知道了
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();
}