在VS2017中使用opencv编写C++程序时出现如下错误:


报错代码如下:

char* image_window = "Source Image";
char* result_window = "Result window";

查了查资料,可能的原因是在VS2017版本中使用这种char*的表达方式会造成程序崩溃,所以VS2017对其进行了控件管理。
解决方案:

1、先将字符使用字符数组进行存储,再使用指针

char image[] = "Source Image";
char result1[] = "Result window";
char* image_window = image;
char* result_window = result1;

2、在前面加上const

const char* image_window = "Source Image";
const char* result_window = "Result window";

3、右键project -> 属性 -> C/C++ -> 语言 -> 符合模式:否

4、对变量进行强转

char* image_window =(char*) "Source Image";
char* result_window = (char*)"Result window";
几个月之前,接触Android recovery源代码的时候,看ScreenRecoveryUI类的时候,那时候 C++ 基础还不是特别好,一直不明白以下的 初始化 方式: 下面这个是Recovery的一个构造函数,代码位于:screen_ui.cpp,它的类的实现在screen_ui.h。 如下这个ScreenRecoveryUI类,这个类是继承于RecoveryUI类的: 这个文件在screen_ui.h class ScreenRecoveryUI : public RecoveryUI { public: ScreenRecoveryUI(); void Init(); 在声明变量 char * 时改成 const char *即可 原文链接: const char * 类型 不能 用于 初始化 char * 类型 实体 _触动人生的博客-CSDN博客_ 不能 用于 初始化 char 类型 实体 转载一篇理解堆和栈区别的好文章 此文章虽然是面向C/ C++ 程序员写得,但是对咱们Java程序员还是很有帮助的。堆和栈的区别一、预备知识—程序的内存分配一个由C/ C++ 编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数 ,局部变量的 等。其操作方式类似于数据结构中的栈。2、堆区(heap) —... char str = "hello world"; // 错误 代码 双引号 char str = ( char )"hello world";//正确代码 使用强制 类型 转换 先用字符数组进行存储,然后再使用指针: char str[] = "hello world"; 在visual studio中,在项目上右键,在弹出菜单上选择“属性”,选择“C/ C++ ”,然后在“语言”中,把“符合模式” 有些成员变量的数据 类型 比较特别,它们的 初始化 方式也和普通数据 类型 的成员变量有所不同。这些特殊的 类型 的成员变量包括: a. 常量型成员变量( const ) b. 引用型成员变量 (&) c. 静态成员变量 (static) d. 整型静态常量成员变量 static const int e. 非整型静态常量成员变量 static const double 1. 常量... 首先,我们需要理解C语言中的结构体(struct)。结构体是一种可以储存不同 类型 数据的复合数据 类型 1。int roll;上面的代码定义了一个名为student的结构体,其中包含了三个不同 类型 的字段:一个字符数组name,一个整数roll和一个浮点数marks。C语言中,由于内存分配时间和语法限制,结构体定义时无法为其成员变量赋初 。但在创建结构体变量时,我们可以通过列表 初始化 或单独赋 的方式来设定成员变量的