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

const_cast功能:

const类型强制转化为非const类型

const_cast<new type>(expression)

例:

const int a = 5;
int* b = &a ;//error : const变量值不能更改

使用const_cast强制转换为非const:

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

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

时间: 2024-10-05 11:06:18

invalid conversion from `const void*' to `void*'的相关文章

invalid conversion from &#39;void* (*)()&#39; to &#39;void* (*)(void*)&#39;

void *thread1() if((temp = pthread_create(&thread[0], NULL, thread1, NULL)) != 0) 提示:invalid conversion from 'void* (*)()' to 'void* (*)(void*)' ============= 改成: void *thread1(void *) void* (*)(void*): (*)表示这里需要一个函数指针, (void*)表示参数类型需要为void* 参考: http

C++:invalid conversion from &#39;unsigned char *&#39; to &#39;const char *&#39;

最近使用node的串口库发现很慢,自己用c++写了个驱动使用node去调用它并测试通过,速度也很快,最初版本记录下: test.js var test = require('./build/Release/test'); test.ArduinoDevice('test', function(data) { console.log(data); }); gyp配置: { "targets": [ { "target_name": "test",

void *memmove( void* dest, const void* src, size_t count );数据拷贝,不需要CPU帮助

分享到 腾讯微博 QQ空间 新浪微博 人人网 朋友网 memmove 编辑词条 编辑词条 --> memmove用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中.但复制后src内容会被更改.但是当目标区域与源区域没有重叠则和memcpy函数功能相同. 快速导航 目录 1函数简介 2程序示例 大事记 光影集锦 图册集锦 花絮视频 1函数简介 原型:void *memmove( void* dest,

invalid use of non-static member function ‘void Date::init(int, int, int)’

#include<iostream> using namespace std; class Date { public: int day,month,year; void init(int,int,int); void print_ymd(); }; void Date::init(int yy, int mm, int dd) { year = yy; month = mm; day = dd; } void Date::print_ymd() { std::cout << ye

void及void指针类型

1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并 详述void及void指针类型的使用方法与技巧. 2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据. void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义: void a; 这行语句编译时会出错,提示“illegal use of ty

void及void指针含义的深刻解析

void的含义 void即"无类型",void *则为"无类型指针",能够指向不论什么数据类型. void指针使用规范①void指针能够指向随意类型的数据,亦就可以用随意数据类型的指针对void指针赋值.比如:int * pint;void *pvoid;pvoid = pint; /* 只是不能 pint= pvoid; */假设要将pvoid赋给其它类型指针,则须要强制类型转换如:pint= (int *)pvoid; ②在ANSIC标准中,不同意对void指针

void 与 void* 详解

void关键字的使用规则: 1. 如果函数没有返回值,那么应声明为void类型: 2. 如果函数无参数,那么应声明其参数为void: 3. 如果函数的参数可以是任意类型指针,那么应声明其参数为void * : 4. void不能代表一个真实的变量: void体现了一种抽象,这个世界上的变量都是“有类型”的 #########################################################################1.概述 许多初学者对C/C++语言中的voi

关于typedef void (*funcptr)(void)问题

一.看了一下H.264硬解代码,发现有类似这种方式的定义: typedef void (*exec_ref_pic_marking_adaptive_mmco_func)( GstVaapiDecoderH264  *decoder, GstVaapiPictureH264  *picture, GstH264RefPicMarking *ref_pic_marking ); static const exec_ref_pic_marking_adaptive_mmco_func mmco_fu

void与void*详解

void关键字的使用规则: 1. 如果函数没有返回值,那么应声明为void类型: 2. 如果函数无参数,那么应声明其参数为void: 3. 如果函数的参数可以是任意类型指针,那么应声明其参数为void * : 4. void不能代表一个真实的变量: void体现了一种抽象,这个世界上的变量都是“有类型”的 #########################################################################1.概述 许多初学者对C/C++语言中的voi