C++ g++字符空错误
我尝试使用gcc版本4.3.2 20081105 Red Hat 4.3.2-7 gcc进行编译 输入文件具有常量字符:C++ g++字符空错误,c++,g++,type-conversion,C++,G++,Type Conversion,我尝试使用gcc版本4.3.2 20081105 Red Hat 4.3.2-7 gcc进行编译 输入文件具有常量字符: #include <stdio.h> #include <stdlib.h> #include "textfile.h" ... const char * vs=NULL; vs = textRead("myfile.file"); const char * vv = vs; free(vs); 第一个警告是关于vs=textReadmyfile.f
#include <stdio.h>
#include <stdlib.h>
#include "textfile.h"
...
const char * vs=NULL;
vs = textRead("myfile.file");
const char * vv = vs;
free(vs);
第一个警告是关于vs=textReadmyfile.file;
第二个错误是关于freevs
我的代码有什么问题 第一个错误是因为您的textRead函数很可能被声明为:
const char *textRead(char *)
不推荐将类型为const char*的字符串myfile.file自动转换为char*。通过将textRead改为接受常量字符*来修复此问题
第二个错误。。。好的,再一次,看看编译器告诉你的:有些东西期望一个void*,而你正在传递一个const void*:在这种情况下,free需要一个void*指针。您有一个const char*,它可以隐式转换为const void*。但是const void*不能变成void*
通过正确使用const返回property来修复它。您尚未发布textRead函数的外观,因此我假设其签名如下:
void *textRead( char *filename );
textRead使用要读取的文件名,它不需要修改传递给它的字符串,因此将textRead更改为
如果无法修改函数,请将代码更改为
char filename[] = "myfile.file";
vs = textRead( filename );
关于free的错误消息是不言自明的,free需要一个void*,而您要给它传递一个const指针。我不明白为什么vs需要是常量字符*而不是字符*。改变这一点,错误就会消失
另外,我不明白为什么在释放vs之前要复制vs,但可能你没有发布这两行之间发生的内容。问题是,free需要一个空*而你却传递了一个const void*。这正是编译器所说的。我想我需要一个好的教程来理解这个cpp,在linux操作系统下使用g++。对不起,我打扰了团队,你没有打扰任何人。提问和学习很好。我看到了stdio.h、stdlib.h和free。。。为什么这个标签是C++?TestTrad把文件名取为一个带有文件名的着色器路径。主要问题是如何设置所有设置以使其工作。我使用stdlib.h。我对C++不太好,我认为我使用的教程也是在Windows操作系统上制作的。我认为C++有另外一个标题,但我在这方面是新的。对此非常抱歉。如果我使用它,我会得到以下错误:main.cpp:116:error:expected-unqualified-id在“[”之前token@CatalinFestila抱歉,数组声明的语法混乱。已修复。
void *textRead( char const *filename );
char filename[] = "myfile.file";
vs = textRead( filename );