【问题标题】:compiler doesn't recognize FILE* variable编译器无法识别 FILE* 变量
【发布时间】:2015-05-14 22:02:54
【问题描述】:

(使用 Visual Studio 2012 C++ 编译器)

下面的编译就好了:

FILE *filePointer = fopen("file.txt","wb");

但如果我尝试将其分成两行:

FILE *filePointer;
filePointer = fopen("file.txt","wb");

在第二行,编译器无法将filePointer 识别为变量。我收到类似的错误

Error:  this declaration has no storage class or type specifier

error C2040: 'filePointer' : 'int' differs in levels of indirection from 'FILE *'
error C2440: 'initializing' : cannot convert from 'FILE *' to 'int'

为什么它不记得filePointerFILE*

【问题讨论】:

  • 你使用哪个#includes?
  • (使用 Visual Studio 2012 C++ 编译器)
  • c++ 现在已经与 c 不同了。它们不再兼容。在某些特定的编译器中,可能存在一些问题。实际上,自从名称更改以来,vs 不再专门支持 c。
  • 你能提供一个完整的文件来说明这个问题吗?例如,是否只在您提供的代码周围添加一个 main() 函数,然后将 #include <stdio.h> 放在它前面会产生一个 VS 抱怨的文件?
  • 代码是否可能出现在文件范围内,而不是在函数中?

标签: c


【解决方案1】:

这是一个声明:

FILE *filePointer = fopen("file.txt","wb");

这也是一个声明:

FILE *filePointer;

然而,这是一个声明。

filePointer = fopen("file.txt","wb");

声明声明变量,可以出现在顶层(声明全局变量)或函数内(声明局部变量)。另一方面,语句只能出现在函数中,并且可以访问局部或全局变量。只有声明可以出现在函数之外,所以如果你把一个声明放在那里,编译器会尝试把它当作一个声明,并且通常会给你一个令人困惑的错误消息,说明声明有问题,就像你引用的那些。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    相关资源
    最近更新 更多