在编译过程中,出错语句如下:LOG(INFO) << "user id:" << org.user_id ;
报错:
error: expected primary-expression before '(' token
error: expected unqualified-id before numeric constant
但是反复查找也没发现什么错误,后来查资料之后才发现是宏定义INFO和另外一个头函数中的INFO冲突,从而导致这种错误。
但是这个头函数又是我需要的,如何鱼和熊掌兼得呢。这里采用了一个非常巧妙的包装技术,仅供大家参考:
LOG(INFO)的头函数为:logging.h
与之冲突的头函数为:dbclient.h(暂时不考虑具体冲突是怎么的)
我们新建文件my_dbclient.h my_dbclient.cpp 作为自定义的接口,具体实现如下。
my_dbclient.h
<pre name="code" class="cpp">#include <iostream>
#include <vector>
#include <map>
//注意:这里并不包含dbclient.h ,否则就白包装了。。
//定义DBClientConnection,Query,避免undefine 错误
namespace mongo {
class DBClientConnection;
class Query;
}
class my_dbclient{
private:
mongo::DBClientConnection * m_newsdb_conn;
public:
my_dbclient();
~my_dbclient();
private:
bool QueryNewsDB( mongo::Query condition, std::vector<SimpleNewsInfo>&news_vec );
my_dbclient.cpp
<pre name="code" class="cpp">#include "my_dbclient.h"
#include "dbclient.h"//这里再把dbclient.h包含进来,这样,其他函数include"my_dbclient.h"就不会把dbclient.h包含进去
using namespace std;
using namespace mongo;
my_dbclient::my_dbclient()
{ }
my_dbclient::~my_dbclient()
{}
通过这种方式,即可以用dbclient库的功能,同时也可以调用logging.h