我之前没有使用过 void* 和 const_correctness,所以我不明白我在下面的代码中做错了什么。我想要的只是将 const 对象的成员函数返回的 void* 转换为 int*。请提出更好的方法。谢谢。
出现以下错误
passing 'const MyClass' as 'this' argument of 'void* MyClass::getArr()' discards qualifiers
所以这是我遇到问题的实际程序
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);
}
在这种情况下,只有“print()”等方法知道“getData”返回的数据类型。我不能使用模板,因为用户不知道 MyClass 是如何实现的。谢谢。请随意提出替代方案。
最佳答案
我认为问题不在于从数组到 void *
的转换,而是在 obj
时尝试调用 obj.getArr()
code> 被标记为 const
并且 MyClass::getArr()
不是 const
成员函数。如果您将该成员函数的定义更改为
const void *getArr() const { return static_cast<const void*>(arr); }
然后这个错误应该会自行解决。您可能还想执行常量重载:
const void *getArr() const { return static_cast<const void*>(arr); }
void *getArr() { return static_cast< void*>(arr); }
关于c++ - 将 const void* 转换为 const int*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4730503/