我正在尝试将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驱动器上上传了相关代码(只有三个文件“ 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
之前就已经在那里),因此找不到它。如果您想这样做,则必须修改这些函数的调用方式。