c++ - 将 const void* 转换为 const int*

标签 c++ casting const-correctness

我之前没有使用过 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/

相关文章:

c++ - Qt in Visual Studio 2013 with cmake - 我如何让它工作?

c++ - OpenGL - 绘图模式

c++ - const 函数重载

c++ - 我想将对类型 T 的非常量左值引用绑定(bind)到类型 T 的临时变量

C++11 模板 : How to ensure that the type inherits a class?

c++ - 试图理解 boost 队列示例

java - 跨语言网络交流设计

casting - 声明了一个列表,实现为 LinkedList,不能使用 getLast() 方法

java - java中未经检查的分配

c - 指向常量函数的指针是什么意思?