【问题标题】:Error: implicit declaration of function `int open(...)'错误:函数“int open(...)”的隐式声明
【发布时间】:2017-05-10 10:43:22
【问题描述】:

我在 Solaris OS 上的一个 C++ 项目中使用 open 函数。

#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h>

char in_pathname[PATH_MAX];
int  in_fd = -1;
in_fd = ::open(in_pathname, (O_RDWR|O_CREAT|O_TRUNC), 0600);

使用上面的行我得到以下编译错误。

函数`int open(...)'的隐式声明

知道为什么会这样。

注意:这个源代码很老了,我是用gcc 2.95.3版本来编译的。

【问题讨论】:

  • 您的编译器似乎不知道您的函数(需要声明)。你检查过你包含的内容吗?你需要这个:#include
  • 感谢您的快速回复。我已经包含了这个标题。仍然出现此错误。
  • 请发布一个最小的完整示例。
  • 谢谢@molbdnilo。我已经更新了代码块。
  • 你的编辑从哪里得到fcntl.h?那个文件里有什么? g++ -M source.cc 的输出是什么,source.cc 是您的 C++ 源代码?有关-M 选项的详细信息,请参阅gcc.gnu.org/onlinedocs/gcc/…

标签: c++ unix gcc solaris


【解决方案1】:

一些(较旧的)编译器允许您使用尚未声明的函数并假定它返回 int。

如果您使用文件但未包含声明它的标头,则会发生这种情况。您似乎正在使用文件的 open 方法,these docs 建议您因此需要

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

【讨论】:

  • 感谢您的回答。我已经包含了这些标题,但仍然出现错误。
  • 您能否包含足够的代码来重现该问题?
  • 我已经编辑了代码块以添加我正在使用的包含标题和变量。感谢您的帮助
  • 如果你打电话给open而不是::open怎么办?
  • 刚刚尝试调用 open 而不是 ::open。同样的错误:-(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 2013-03-20
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多