我的类中有一个const方法,不能改为非const.在这个方法中,我需要调用一个非const方法,但编译器不允许我这样做.
它有什么办法吗?以下是我的代码的简化示例:
int SomeClass::someMethod() const {
QColor saveColor = color();
setColor(QColor(255,255,255)); // Calling non-const method
// ....
setColor(saveColor); // restore color
return 1;
}
Run Code Online (Sandbox Code Playgroud) 我有一个类,其成员不会被类的方法改变,所以我将其标记为const.我的问题是我使用默认赋值运算符就像复制构造函数一样,以避免多个声明.但在这种情况下,赋值运算符不会自动生成,因此我得到了一些编译器错误:
'operator =' function is unavailable.这似乎没有真正的生活场景,其中可以实际使用const类成员(例如,你在STL代码中看到过任何const成员吗?).
有没有办法解决这个问题,除了删除const?
编辑:一些代码
class A
{
public :
const int size;
A(const char* str) : size(strlen(str)) {}
A() : size(0) {}
};
A create(const char* param)
{
return A(param);
}
void myMethod()
{
A a;
a = create("abcdef");
// do something
a = create("xyz");
// do something
}
Run Code Online (Sandbox Code Playgroud) 我有一个方法run()成员MyClass.编译时,我明白了
Error 3 error C2662: 'MyClass::run' :
cannot convert 'this' pointer from 'const MyClass' to 'MyClass&'
Run Code Online (Sandbox Code Playgroud)
ITOH,如果我把这个方法设为静态,我没有错误.方法调用发生在这里:
Errors MyClass::execute( const AbstractExecutionContext &ctx ) const
{
Errors errs;
Watch wat; wat.restart();
{
run() ;
}
return errs;
}
Run Code Online (Sandbox Code Playgroud)
和这种方法的声明是
Errors execute(const AbstractExecutionContext &ctx) const;
Run Code Online (Sandbox Code Playgroud)
我希望我可以使这个方法不是静态的,因为如果它是静态的,run()调用的方法也必须是静态的,并且无法访问非静态的数据成员(我必须丑陋地将它们作为参数传递给方法) .
编译错误的原因是什么,什么是解决方案?