2011-01-19 103 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); }