【发布时间】:2011-01-19 00:15:08
【问题描述】:
我之前没有使用过 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* 转换为 int*... (int*)vp;完毕。也就是说,你为什么要在 C++ 中使用像这样的 void* 指针呢?模板我的朋友,模板...
-
谢谢埃德。在这种情况下如何应用模板?
-
@Ed:是的,明白了.. 我正在更改我的代码。我不知道为什么我没有考虑模板。谢谢
标签: c++ casting const-correctness