gpt4 book ai didi

C++ 错误 : ‘::close’ has not been declared miniSAT

转载 作者:行者123 更新时间:2023-11-28 05:01:43 25 4
gpt4 key购买 nike

我正在尝试将 miniSAT 1.14 嵌入到我的程序中。我需要将命名空间添加到所有文件。

#include "File.h"

void File::open(int file_descr, FileMode m, bool own)
{
if (fd != -1) ::close(fd);
fd = file_descr;
mode = m;
own_fd = own;
pos = 0;
buf = xmalloc<uchar>(File_BufSize);
if (mode == READ) size = read(fd, buf, File_BufSize);
else size = -1;
}
//........

当我尝试添加命名空间“miniSAT”时

#include "File.h"
namespace minisat{

void File::open(int file_descr, FileMode m, bool own)
{
if (fd != -1) ::close(fd);
fd = file_descr;
mode = m;
own_fd = own;
pos = 0;
buf = xmalloc<uchar>(File_BufSize);
if (mode == READ) size = read(fd, buf, File_BufSize);
else size = -1;
}

我遇到以下错误 错误:'::close' 尚未声明

然而在另一个版本的 miniSAT 中我可以编译成功。

谁能说出它们之间的区别?

我在google drive上上传了相关代码(只有三个文件"File.cpp","File.h","Global.h")。

https://drive.google.com/drive/folders/0B5t7DJpKfL7UUU1MSXFWZnZDUTg?usp=sharing

后缀为'1'的就是我能编译的。

但我需要再编译一个。

谁能帮帮我?

最佳答案

MiniSAT 将其函数包装在名为 Minisat 的命名空间中,而 MiniSAT+ 将它们包装在 MiniSat 命名空间中(注意两者之间的区别,即大写的“S”在第二种情况下)。 C++ 区分大小写,因此这是两个不同的命名空间,不应有任何名称冲突。 MiniSAT+ 在全局命名空间中保留了一些函数,这是一个不好的做法,但另一方面,MiniSAT 似乎将其所有函数和类都放在适当的命名空间中,因此在从 MiniSAT+ 获取全局函数的情况下应该没有名称冲突任何一个。总结一下:您可能不需要在自己的命名空间中包装任何东西。每当您使用同名函数时,只需引用正确的命名空间即可。另请注意,即使两个函数具有相同的名称并位于相同的命名空间中,但采用不同的参数,也不会发生名称冲突。

至于你的错误,你得到它是因为你将 close() 函数放在 minisat 命名空间中,而 open() 函数调用 ::close(),即它在全局命名空间中查找 close() 函数 - 它不再存在(它在您之前就存在)将其移至 minisat),因此无法找到。如果你想这样下去,你必须修改这些函数的调用方式。

关于C++ 错误 : ‘::close’ has not been declared miniSAT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45775932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com