2011-01-19 43 views
1

我没有使用void *和const_correctness之前,所以我不明白我在做什么错在下面的代码。我只想将一个const对象的成员函数返回的void *转换为int *。请提出更好的方法。谢谢。铸造const void * const const *

我收到以下错误

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); 
} 

只有方法,如在这种情况下,“打印()”知道数据类型返回的实际程序通过'getData'。我无法使用模板,因为用户不知道MyClass是如何实现的。谢谢。随意建议替代品。

+0

这里是你如何将一个void *转换为int * ...(int *)vp;完成。这就是说,为什么你用C++中的void *指针来解决这个问题呢?模板我的朋友,模板... – 2011-01-19 00:18:24

+0

谢谢埃德。如何在这种情况下应用模板? – blueskin 2011-01-19 00:24:40

回答

4

我觉得这个问题是不是从你的阵列要转换成void *但在试图调用obj.getArr()obj标记constMyClass::getArr()不是const成员函数。如果您将该成员函数的定义更改为

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

然后,此错误应该自行解决。你也许想要做一个const超载:

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