【发布时间】:2013-11-17 04:17:09
【问题描述】:
所以我正在使用 SMAUG MUD 代码库的旧副本,我目前正在实现 MySQL 数据库支持,但我遇到了困难:只要我在代码库中包含 MySQL C API 头文件,我就会得到以下错误:
[darkston@harbinger src]$ make
make[1]: Entering directory `/home/mud/darkston/devel/mud/src'
Compiling accounts.cpp...
g++ -MD -c -Wall --pedantic -Wno-long-long -DSHARED_STR_NO_STRICMP -g3 -I/home/mud/darkston/include -I/home/mud/darkston/include -I/home/mud/darkston/include -I/usr/include/mysql -o .o/accounts.o accounts.cpp
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_deque.h: In member function ‘void std::_Deque_base<_Tp, _Alloc>::_M_initialize_map(size_t)’:
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_deque.h:469: error: expected unqualified-id before ‘(’ token
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/deque.tcc: In member function ‘void std::deque<_Tp, _Alloc>::_M_reallocate_map(size_t, bool)’:
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/deque.tcc:747: error: expected unqualified-id before ‘(’ token
make[1]: *** [.o/accounts.o] Error 1
make[1]: Leaving directory `/home/mud/darkston/devel/mud/src'
make: *** [all] Error 2
我没有在程序中添加任何其他代码,除了
#include <my_global.h>
#include <mysql.h>
我搜索了一下,很多人都说“min”和“max”宏存在问题,但源代码中没有“min”或“max”宏。再次肯定的是,我 #ifndef 阻止了所有可用的实用程序宏--
#ifndef UMIN
#define UMIN(a, b) ((a) < (b) ? (a) : (b))
#endif
#ifndef UMAX
#define UMAX(a, b) ((a) > (b) ? (a) : (b))
#endif
... etc
仍然给我同样的错误。
我使用的是 GCC 版本 4.1.2
有什么想法吗?
::编辑:: 好的,我让它工作了——不幸的是,你们给出的答案都没有让它工作,所以我不得不将它与程序的其余部分隔离,并创建一个接口到连接两者的接口。我搬家了
#include <mysql.h>
#include <my_global.h>
到我自己的文件 mysqlAPI.cpp 并创建函数来访问我需要的内容,从而将其与其他所有内容隔离开来。
到目前为止它有效,它可能不是最好的答案,但它是一个答案。
感谢大家的帮助!
【问题讨论】:
-
我会查看它抱怨的那些行,注意标识符,然后我会查看您刚刚包含的头文件,看看这些标识符是否已定义为头文件中的某些内容。
-
另一种方法是将您的#includes 移动到其他#includes 下方。