invalid conversion from `const void*' to `void*'


在編譯一個工程時出錯,使用memcpy函數處報錯 invalid conversion from `const void*' to `void*'

void image2mat(const image<uchar>* I, cv::Mat& img){ int width = I->width(); int height = I->height(); img.create(height, width, CV_8UC1); memcpy(img.datastart, (char *)imPtr(I, 0, 0), width * height * sizeof(uchar)); }

原來memcpy()函數:

void* memcpy(void*, const void*, size_t)’

第一個參數是void * ( 非const指針 ),而opencv3.2中 cv::Mat.datastart 返回的是const指針,在這里即紅色部分,img.datastart返回的是const char*,(不清楚3.0之前的版本是不是返回的非const指針)

解決方法:改為

memcpy(const_cast<uchar *>(img.datastart), (char *)imPtr(I, 0, 0), width * height * sizeof(uchar));

 或者用常見的強制類型轉換方法:

(uchar*)img.datastart

 

const_cast功能:

const類型強制轉化為非const類型

const_cast<new type>(expression)

例:

const int a = 5; int* b = &a ;//error : const變量值不能更改,普通指針不能指向常量
const int *c = &a;//正確

使用const_cast強制轉換為非const:

const int a = 5; int* b = const_cast<int *>(&a);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM