我有这个c模块:
#include "stdafx.h"
#include "targetver.h"
#include "libavutil\mathematics.h"
#include "libavcodec\avcodec.h"
FILE fileName;
我做了文件fileName;
这我有init函数:
void init(const char *filename)
{
fileName = filename;
avcodec_register_all();
printf("Encode video file %s\n", fileName);
所以我做了fileName = filename; 我做的原因是我有另一个函数我叫做start():
void start()
{
/* open it */
if (avcodec_open2(c, codec, NULL) < 0) {
fprintf(stderr, "Could not open codec\n");
exit(1);
}
// f = fopen(filename, "wb");
errn = fopen_s(&f,fileName, "wb");
if (!f) {
fprintf(stderr, "Could not open %s\n", fileName);
exit(1);
}
}
在开始时我有文件名,但它没有找到它,所以我想使用fileName。 但我现在收到的错误很少:
在这一行:fileName = filename;在=符号上我得到红线错误:
错误1错误C2440:'=':无法从'const char *'转换为'FILE'
然后在这一行:errn = fopen_s(&amp; f,fileName,“wb”) 在fileName上我得到:
错误2错误C2065:'filename':未声明的标识符
fileName上此行上的错误号2:fprintf(stderr,“无法打开%s \ n”,fileName);
然后fileName = filename上的另一个错误:
6 IntelliSense: no operator "=" matches these operands
operand types are: FILE = const char *
上次错误:7智能感知:没有合适的从“文件”到“常量字符*”的转换功能
我想做的就是声明全局fileName变量,以便在所有地方使用它。
答案 0 :(得分:5)
FILE
是一种类型,用于表示打开的文件(它包含文件句柄,文件中的位置等)。您无法将char *
存储在FILE
类型的变量中,因为它们是不同的类型。 Read about the FILE type here
您要做的是存储文件名。文件名是一个字符串。请改用const char *
。您的错误消息准确地告诉您:“无法将字符串转换为文件”。
Error 1 error C2440: '=' : cannot convert from 'const char *' to 'FILE'
阅读这些错误并试图了解它们的实际含义可以帮助您解决这样的问题。如果编译器抱怨将一种类型转换为另一种类型,则清楚地表明您对值的类型或您尝试将其赋值的变量感到困惑。