我在一个程序上添加了这段代码,据说是为了创建一个文本文件(当我添加标有 //textfile 的程序底部时出现错误)
//here is a fragment of the program
void next_macroblock(Macroblock *currMB)
{
VideoParameters *p_Vid = currMB->p_Vid;
InputParameters *p_Inp = currMB->p_Inp;
Slice *currSlice = currMB->p_Slice;
int slice_type = currSlice->slice_type;
BitCounter *mbBits = &currMB->bits;
(some codes deleted)
// Statistics
cur_stats->quant[slice_type] += currMB->qp;
++cur_stats->num_macroblocks[slice_type];
//textfile
FILE * pFile;
pFile = fopen ("mytable.txt","w");
fprintf (pFile, " \t %d \t | \n",mbBits->mb_total);
fclose (pFile);
}
错误:
**c:\jm 18.4\lencod\src\macroblock.c(223): error C2275: 'FILE' : illegal use of this type as an expression**
**c:\program files\microsoft visual studio 11.0\vc\include\stdio.h(66) : see declaration of 'FILE'**
c:\jm 18.4\lencod\src\macroblock.c(223): error C2065: 'pFile' : undeclared identifier
c:\jm 18.4\lencod\src\macroblock.c(224): error C2065: 'pFile' : undeclared identifier
c:\jm 18.4\lencod\src\macroblock.c(224): warning C4047: '=' : 'int' differs in levels of indirection from 'FILE *'
c:\jm 18.4\lencod\src\macroblock.c(225): error C2065: 'pFile' : undeclared identifier
c:\jm 18.4\lencod\src\macroblock.c(225): warning C4047: 'function' : 'FILE *' differs in levels of indirection from 'int'
c:\jm 18.4\lencod\src\macroblock.c(225): warning C4024: 'fprintf' : different types for formal and actual parameter 1
c:\jm 18.4\lencod\src\macroblock.c(226): error C2065: 'pFile' : undeclared identifier
c:\jm 18.4\lencod\src\macroblock.c(226): warning C4047: 'function' : 'FILE *' differs in levels of indirection from 'int'
c:\jm 18.4\lencod\src\macroblock.c(226): warning C4024: 'fclose' : different types for formal and actual parameter 1
问题来了:我已经放置了#include(因为 FILE 在 stdio.h 中定义)然后以 Unicode 格式保存(因为程序告诉我以 unicode 格式保存,否则会出现更多错误),通过转到 FILE- >高级保存选项->带签名的UTF 8。关于“以 Unicode 格式保存文件的错误仍然存在,直到我删除了一些包含德语字符的评论 /* */。
关于 FILE 的错误仍然相同。什么地方出了错?
根据@macduff 和@KeithThompson 的说法,我应该在我所做的那部分代码中包含 { } 。错误消失了,但没有创建文本文件(我想做的是创建一个文本文件,用于打印代码中变量的值。)
新问题:如果 Visual Studio 2012 遵循 C89/C90 标准并且我不能在函数或块的中间声明变量,那么创建文本文件以打印变量 mbBit 的变化值的最佳方法是什么->mb_total? (我应该将 { } 放在代码上以创建文本文件、创建新函数还是在头文件中声明我的参数 - 如果是,我必须声明哪些参数以及如何声明它们?)