我编写了一个类,其中的对象和类属性是不可变的-但是,每次尝试更新类属性时,都会收到以下错误;
“未处理的异常……在ConsoleApplication.exe中……堆栈溢出”
有关类对象的一些细节。该类的头文件,
class AnObject {
public:
//constructor
AnObject();
AnObject(
const std::string AttributeA,
const __int32 AttributeB
)
const AnObject AnObject::SetAttributeA(const std::string AttributeA) const;
const AnObject AnObject::SetAttributeB(const __int32 AttributeB) const;
const AnObject AnObject::SetMyAttributes (const std::string AttributeA, const __int32 AttributeB) const;
private:
const std::string AttributeA;
const __int32 AttributeB;
};
类文件,
AnObject::AnObject() : AttributeA("1002"), AttributeB(1) {};
AnObject::AnObject( const std::string AttributeA, const __int32 AttributeB) : AttributeA("1002"), AttributeB(1)
{
SetMyAttributes("1002", 1);
};
const AnObject AnObject::SetMyAttributes(const std::string AttributeA, const __int32AttributeB)
const
{
try {
return AnObject
(
// base fields
AttributeA, AttributeB
)
}
catch (exception e)
{
throw e;
}
};
该对象是不可变的,因此在通过setter类更改参数时将设置所有参数。但是,当我在main中调用方法时,代码会生成错误。
最佳答案
这是您的构造函数:
AnObject::AnObject( const std::string AttributeA, const __int32 AttributeB)
来电
SetMyAttributes("1002", 1);
再次调用构造函数...
const AnObject AnObject::SetMyAttributes(const std::string AttributeA, const __int32AttributeB) const
{
try {
return AnObject(AttributeA, AttributeB); // recursive call
}
...
SetMyAttributes
似乎是一个无用的函数,因为您所有的数据成员都是const
,并且您按值返回了const
对象。通常,您只能在构造函数初始化列表中初始化
const
数据成员。之后,您将无法修改它们。同样的无用也适用于这些(除非您有其他超出正常范围的事情,否则请袖手旁观:
const AnObject AnObject::SetAttributeA(const std::string AttributeA) const;
const AnObject AnObject::SetAttributeB(const __int32 AttributeB) const;
const AnObject AnObject::SetMyAttributes (const std::string AttributeA, const __int32 AttributeB) const;
如果您正在谈论一个完全不变的类,那么您将不会有任何设置者。但是,我建议您在此处阅读所有内容:
const correctness
。关于c++ - C++类错误-不可变,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37244783/