blu*_*kin 1 c++ casting const-correctness
我之前没有使用过void *和const_correctness,所以我不理解下面的代码在做什么。我想要的只是将由const对象的成员函数返回的void *转换为int *。请提出更好的方法。谢谢。
我收到以下错误
passing 'const MyClass' as 'this' argument of 'void* MyClass::getArr()' discards qualifiers
Run Code Online (Sandbox Code Playgroud)
这是我遇到问题的实际程序
class MyClassImpl{
CvMat* arr;
public:
MyClassImpl(){arr = new CvMat[10];}
CvMat *getArr(){return arr;}
};
class MyClass{
MyClassImpl *d;
public:
const void *getArr()const{ return (void*)d->getArr(); }
};
void print(const MyClass& obj){
const int* ptr = static_cast<const int *>(obj.getArr());
}
int main(){
MyClass obj1;
print(obj1);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,只有诸如“ print()”之类的方法才知道“ getData”返回的数据类型。我不能使用模板,因为用户不知道MyClass是如何实现的。谢谢。随时建议替代方案。
我认为问题不在于从数组到a的转换,void *而在于试图被标记obj.getArr()时调用,并且不是成员函数。如果您将该成员函数的定义更改为objconstMyClass::getArr()const
const void *getArr() const { return static_cast<const void*>(arr); }
Run Code Online (Sandbox Code Playgroud)
然后,此错误应自行解决。您可能还想做一个const-overload:
const void *getArr() const { return static_cast<const void*>(arr); }
void *getArr() { return static_cast< void*>(arr); }
Run Code Online (Sandbox Code Playgroud)