';这';参数的类型为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)
。它的参数看起来应该是字符串
而不是无符号
。错误消息是不言自明的。不能对常量对象调用非常量函数。但是,我看不到什么是押记或持有人,也看不到您在何处以及如何申报这些实体。什么是押记
和持有人
?