';这';参数的类型为const,但函数未标记为const P>好的,所以我在C++中有点NoOB,在我的第二个作业中,我需要做一些公有和私下的论证等等。基本上,变元函数不能工作,因为显然它们不是const。< /p>类型。

';这';参数的类型为const,但函数未标记为const P>好的,所以我在C++中有点NoOB,在我的第二个作业中,我需要做一些公有和私下的论证等等。基本上,变元函数不能工作,因为显然它们不是const。< /p>类型。,c++,function,constants,setter,getter,C++,Function,Constants,Setter,Getter,这是类的头文件: class Customer { private: string PhoneNumber_; string Name_; string Address_; public: string get_PhoneNumber() const {return PhoneNumber_;} // Accessor const void set_PhoneNumber(unsigned x) {PhoneNumber_ = x;} // Mutat

这是类的头文件:

class Customer {

private:
    string PhoneNumber_;
    string Name_;
    string Address_;

public:
    string get_PhoneNumber() const {return PhoneNumber_;} // Accessor
    const void set_PhoneNumber(unsigned x) {PhoneNumber_ = x;} // Mutator

    string get_Name() const {return Name_;}
    const void set_Name(unsigned x) {Name_ = x;}

    string get_Address() const {return Address_;}
    const void set_Address(unsigned x)  {Address_ = x;}
};

// declare the CreateCustomer function prototype with default values
Customer* CreateCustomer(const string& id = BLANK, const string& name = BLANK, const string& address = BLANK);

Customer* CreateCustomer(const string& id, const string& name, const string& address) {
    Customer* temp = new Customer();

    temp->get_PhoneNumber() = id; // Due to the Accessors and Mutators PhoneNumber, Name and Address are now functions
    temp->get_Name() = name;
    temp->get_Address() = address;

    return temp;
}
这是我在main.cpp文件中得到的错误:

cout << "\n\nDear ";
    cout << Charge[0].Holder.set_Name() << " (" << Charge[0].Holder.set_PhoneNumber() << ")";  //  DisplayCustomer(customer) ;

    cout << ",\n" << Charge[0].Holder.set_Address() << "\n\n"

cout您已将
电话号码
姓名
地址
声明为
字符串

但是在setter方法中,传递的是
无符号(int)

此外,您还颠倒了getter和setter的用法


另外,setter的返回类型可以是
void
,而不是
const void

Ehm。我认为你应该用相反的方式使用
get
set
。。。 在
CreateCustomer
中,您应该使用
set
函数,当打印
Customer
以流式传输时,您应该使用
get
函数。 而
set
函数应该接收
字符串
,而不是
无符号


因此,最好使用
constructor
,而不是
set
函数,然后只使用
get
函数。

如果要设置值,请使用set方法。get方法仅用于获取变量,而不是设置类的内部变量(如果它们是按您的方式定义的)

正确的用法是:

Customer* CreateCustomer(const string& id, const string& name, const string& address) {
    Customer* temp = new Customer();

    temp->set_PhoneNumber( id );
    temp->set_Name( name );
    temp->set_Address( address );

    return temp;
}
此外,还必须更改方法的接口:

class Customer {

private:
    string PhoneNumber_;
    string Name_;
    string Address_;

public:
    string get_PhoneNumber() const {return PhoneNumber_;} // Accessor
    void set_PhoneNumber(const string& x) {PhoneNumber_ = x;} // Mutator

    string get_Name() const {return Name_;}
    void set_Name(const string& x) {Name_ = x;}

    string get_Address() const {return Address_;}
    void set_Address(const string& x)  {Address_ = x;}
};
因为你想设置字符串而不是数字

使用
conststring&
作为函数参数比string更好,在将字符串作为参数传递时不复制字符串。因为它是一个常量引用,所以您不必担心函数会操纵输入

  • 您应该在类声明中使用
    std::
    。请看“为什么”这个问题

  • 您的
    set
    方法采用
    unsigned
    参数。不能将未签名的字符串分配给
    PhoneNumber\ux。参数必须是字符串

  • 你需要像这样改变你的成员

    std::string get_PhoneNumber() const { return PhoneNumber_; } // Accessor
    const void set_PhoneNumber(std::string const & x) { PhoneNumber_ = x; } // Mutator
    
  • 当你写
    temp->get_PhoneNumber()=id
    您的意图显然是设置
    电话号码
    的值,那么为什么要使用获取方法呢?只需使用适当的set_方法并写入
    temp->set_电话号码(id)

  • 一般避免C++中的指针。如果您确实需要指针,请使用智能指针,如

    std::unique\u ptr
    std::shared\u ptr
    (如果且仅当您需要使用普通指针时,请使用一个)

  • std::string
    的默认值为空字符串,如

    std::string const&id=std::string{}
    对我来说似乎更清楚

  • 要创建具有空/空成员字符串的
    Customer
    类型的对象,只需执行
    Customer\u对象std::string
    默认构造函数,这会导致一个空strign

  • 通常,构造函数用于根据某些参数值创建对象

  • 您可以很容易地编写一个接受所有必需值的构造函数,并且可以通过添加以下内容作为默认构造函数使用:

    Customer(const std::string& id = std::string{}, 
      const std::string& name = std::string{}, 
      const std::string& address = std::string{})
      : PhoneNumber_(id), Name_(name), Address_(address)
    { }
    
    为你们班干杯。看另一个

    看另一个

  • 为了封装,您通常希望避免使用“直接”getter和setter来显示数据结构

  • 我认为更重要的是,首先不应该存在set和get函数……返回类型是
    const void
    CreateCustomer()
    如果要设置电话号码,则应呼叫
    set\u PhoneNumber(id)
    。它的参数看起来应该是
    字符串
    而不是
    无符号
    。错误消息是不言自明的。不能对常量对象调用非常量函数。但是,我看不到什么是押记或持有人,也看不到您在何处以及如何申报这些实体。什么是
    押记
    持有人