error C2275:'FILE'illegal use of this type as an expression

时间:2022-01-27 18:53:51
error C2275: 'FILE' : illegal use of this type as an expression


code:FILE *file = _wfopen(szName, TEXT("rb"));
就这么一条代码,报这么个恶心错,大哥们帮忙看看,怎么下手处理呢?


最后的10分,晕....

23 个解决方案

#1


贴上下文看看

#2


没有#include <stdio.h>吧

#3


//拼接文件名路径得到当前的目录
int iNameLength;
TCHAR szName[MAX_PATH+2];
iNameLength = GetModuleFileName(g_hInstDll, szName, sizeof (szName));
while (szName[--iNameLength] != '\\');
szName[iNameLength + 1] = NULL;
_tcscat(szName,TEXT("MMDic.dat"));


//得到库文件
FILE *file = _wfopen(szName, TEXT("rb"));//<--------------报错的恶心地方

if(file == NULL)
{
MessageBox(m_hwndParent,TEXT ("Can't find MMDic"),TEXT ("ERR"), MB_OK);
return E_FAIL;
}
fseek(file, 0, SEEK_END);
int iLen = ftell(file);
g_SipStatus.pFileBuffer = (char*)malloc(iLen);
fseek(file, 0, SEEK_SET);
fread(g_SipStatus.pFileBuffer, 1, iLen, file);
fclose(file);

#4


貌似_wfopen()的问题,szName参数的类型对吗?

#5


Jinhao 大哥,加了头文件了,问题不在这块。

#6


FILE的问题?

#7


觉得问题还是没有出在这些代码里面

#8


嗯~

#9


不太熟悉wfopen函数

#10


谢谢各位大哥,我再查查资料吧……刚才公司一个高人来现场指导也没解决。

#11



FILE file = _wfopen(szName, TEXT("rb")); //这样试试

#12


应该是工程设置或者也许重新定义了FILE结构什么的

_wfopen(szName, TEXT("rb"));

直接这样写,报错吗

#13


_tcscat(szName,TEXT("MMDic.dat"));

//////这中间没有其他的代码了吗?

//得到库文件
FILE *file = _wfopen(szName, TEXT("rb"));// <--------------报错的恶心地方 

你检查一下.正代码之前,有没有少写了什么,比如) ; #endif 这些之类的.报这个错的原因就是 FILE * file 这句编译器没有把它当作声明一个file,而是 FILE 乘 file. 

#14


引用 12 楼 goodname 的回复:
应该是工程设置或者也许重新定义了FILE结构什么的 

_wfopen(szName, TEXT("rb")); 

直接这样写,报错吗




这样不报错!

#15


你自定义的头文件中FILE大概被重新定义了。。。。请认真查查有没有类似
#define FILE xxx
的地方

#16


你定义的位置不对,纯C程序不能放在程序段中,要放在程序段头定义。

#17


我也遇到了这个问题,我的代码中,进行了两次对不同的两个文件的操作,一次是读出,一次是写入。
但是奇怪的是,如果将两个操作分离即:只读或者只写都不会报错。现在还没搞懂这到底是怎么了!

#18


刚发完帖子,猛地想到了,16楼说的有道理,的确是要放在程序段头(也就是说,一其他关于操作的函数都必须在此定义之后)现在已经通过了。终于可以睡觉啦。
在此 也感谢16楼的兄弟!

#19


引用 16 楼 no1_david 的回复:
你定义的位置不对,纯C程序不能放在程序段中,要放在程序段头定义。



VS 2008 真恶搞~ 搞半天我还以为哪里出问题了呢。

#20


刚刚也碰到这个问题 太雷人啦~~竟然要放到程序段头定义~~

#21


真的是这样。。。C还是不一般

#22


我是来拜谢16楼的,帮了大忙啊,今天我也遇到这个问题了,多谢多谢
引用 16 楼  的回复:
你定义的位置不对,纯C程序不能放在程序段中,要放在程序段头定义。

#23


16楼正解啊,解决了我的问题,谢谢。。。
好变态的纯C

#1


贴上下文看看

#2


没有#include <stdio.h>吧

#3


//拼接文件名路径得到当前的目录
int iNameLength;
TCHAR szName[MAX_PATH+2];
iNameLength = GetModuleFileName(g_hInstDll, szName, sizeof (szName));
while (szName[--iNameLength] != '\\');
szName[iNameLength + 1] = NULL;
_tcscat(szName,TEXT("MMDic.dat"));


//得到库文件
FILE *file = _wfopen(szName, TEXT("rb"));//<--------------报错的恶心地方

if(file == NULL)
{
MessageBox(m_hwndParent,TEXT ("Can't find MMDic"),TEXT ("ERR"), MB_OK);
return E_FAIL;
}
fseek(file, 0, SEEK_END);
int iLen = ftell(file);
g_SipStatus.pFileBuffer = (char*)malloc(iLen);
fseek(file, 0, SEEK_SET);
fread(g_SipStatus.pFileBuffer, 1, iLen, file);
fclose(file);

#4


貌似_wfopen()的问题,szName参数的类型对吗?

#5


Jinhao 大哥,加了头文件了,问题不在这块。

#6


FILE的问题?

#7


觉得问题还是没有出在这些代码里面

#8


嗯~

#9


不太熟悉wfopen函数

#10


谢谢各位大哥,我再查查资料吧……刚才公司一个高人来现场指导也没解决。

#11



FILE file = _wfopen(szName, TEXT("rb")); //这样试试

#12


应该是工程设置或者也许重新定义了FILE结构什么的

_wfopen(szName, TEXT("rb"));

直接这样写,报错吗

#13


_tcscat(szName,TEXT("MMDic.dat"));

//////这中间没有其他的代码了吗?

//得到库文件
FILE *file = _wfopen(szName, TEXT("rb"));// <--------------报错的恶心地方 

你检查一下.正代码之前,有没有少写了什么,比如) ; #endif 这些之类的.报这个错的原因就是 FILE * file 这句编译器没有把它当作声明一个file,而是 FILE 乘 file. 

#14


引用 12 楼 goodname 的回复:
应该是工程设置或者也许重新定义了FILE结构什么的 

_wfopen(szName, TEXT("rb")); 

直接这样写,报错吗




这样不报错!

#15


你自定义的头文件中FILE大概被重新定义了。。。。请认真查查有没有类似
#define FILE xxx
的地方

#16


你定义的位置不对,纯C程序不能放在程序段中,要放在程序段头定义。

#17


我也遇到了这个问题,我的代码中,进行了两次对不同的两个文件的操作,一次是读出,一次是写入。
但是奇怪的是,如果将两个操作分离即:只读或者只写都不会报错。现在还没搞懂这到底是怎么了!

#18


刚发完帖子,猛地想到了,16楼说的有道理,的确是要放在程序段头(也就是说,一其他关于操作的函数都必须在此定义之后)现在已经通过了。终于可以睡觉啦。
在此 也感谢16楼的兄弟!

#19


引用 16 楼 no1_david 的回复:
你定义的位置不对,纯C程序不能放在程序段中,要放在程序段头定义。



VS 2008 真恶搞~ 搞半天我还以为哪里出问题了呢。

#20


刚刚也碰到这个问题 太雷人啦~~竟然要放到程序段头定义~~

#21


真的是这样。。。C还是不一般

#22


我是来拜谢16楼的,帮了大忙啊,今天我也遇到这个问题了,多谢多谢
引用 16 楼  的回复:
你定义的位置不对,纯C程序不能放在程序段中,要放在程序段头定义。

#23


16楼正解啊,解决了我的问题,谢谢。。。
好变态的纯C