1

我之前没有使用过 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 是如何实现的。谢谢你。随意提出替代方案。

4

1 回答 1

5

我认为问题不在于从您的数组转换为 a void *,而在于尝试调用obj.getArr()whenobj被标记const并且MyClass::getArr()不是const成员函数。如果您将该成员函数的定义更改为

 const void *getArr() const { return static_cast<const void*>(arr); }

那么这个错误应该会自行解决。您可能还想做一个 const-overload :

 const void *getArr() const { return static_cast<const void*>(arr); }
       void *getArr()       { return static_cast<      void*>(arr); }
于 2011-01-19T00:18:08.830 回答