close函数无法识别 - C ++

时间:2013-01-29 03:13:28

标签: c++ c unix

我在名为RaftLog.cc的文件中有以下代码:

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



namespace LogCabin {
namespace Server {
namespace RaftConsensusInternal {

namespace FilesystemUtil = Storage::FilesystemUtil;

namespace {
bool
fileToProto(const std::string& path, google::protobuf::Message& out)
{
    int fd = open(path.c_str(), O_RDONLY);
    if (fd == -1)
        return false;
    else
        close(fd);
    FilesystemUtil::FileContents file(path);

        // more code down here, not useful to the problem.

然而,当我编译时,我有:

build/Server/RaftLog.cc: In function ‘bool LogCabin::Server::RaftConsensusInternal::{anonymous}::fileToProto(const string&, google::protobuf::Message&)’:
build/Server/RaftLog.cc:43:17: error: ‘close’ was not declared in this scope
build/Server/RaftLog.cc: In function ‘void LogCabin::Server::RaftConsensusInternal::{anonymous}::protoToFile(google::protobuf::Message&, const string&)’:
build/Server/RaftLog.cc:76:13: error: ‘close’ was not declared in this scope
In file included from ./Server/RaftConsensus.h:17:0,

我不知道为什么close()功能未被#include <fcntl.h>包含在内。愿有人请帮帮我吗?如果我应该包含更多代码,也请告诉我。

2 个答案:

答案 0 :(得分:19)

如果您调用close函数

,则需要包含unistd.h标头文件
#include <unistd.h>

使用fopen/fclosefdopen/close

答案 1 :(得分:0)

在Visual Studio 2015中

#include <corecrt_io.h>

似乎有效!