在C ++中编译错误

时间:2014-05-17 22:19:37

标签: c++ boost

我写了一个名为" myprotocol"在c ++中使用QT创建器作为IDE和正常的make命令进行编译,我在一个单独的项目中测试了库作为测试平台,并且库完美地工作。

后来我尝试在另一个使用b2工具编译其源代码的项目中使用该库。我能够链接到myprotocol库但是我得到了奇怪的输出错误,说我在原版" myprotocol"图书馆项目,这是不正确的。

以下是错误:

/home/HA/myprotocol/archive.hpp:371:25: error: declaration of ‘operator&’ as non-function
/home/HA/myprotocol/archive.hpp:371:23: error: expected ‘;’ at end of member declaration
/home/HA/myprotocol/archive.hpp:371:41: error: expected ‘)’ before ‘&’ token

这是包含错误的行:

iarchive& operator&(CDBRequest& buf);

这是CDBRequest的定义:

class CDBRequest
{
public:

CDBRequest() : _cdb_request(0)
{}

CDBRequest(uint16 value)
{
    _cdb_request = uint32(value) << 16;
}

CDBRequest& operator=(uint32 cdb_request)
{
    _cdb_request = cdb_request;
    return *this;
}

void set_value(uint16 value)
{
    _cdb_request = uint32(value) << 16;
}

operator uint32&() { return _cdb_request; }

private:
    uint32 _cdb_request;

};

这是我用来在b2中编译项目的命令:

b2 variant=release link=static toolset=gcc include=/home/HA/myprotocol/ linkflags="-L /home/HA/myprotocol/ -lmyprotocol"

有谁能告诉我可能是什么问题?

1 个答案:

答案 0 :(得分:0)

我找到了问题的根源:

在库项目中,我有一个名为“types.hpp”的头文件,稍后当我在testbed项目中测试时,我只有一个cpp文件。

但最终当我在根项目中测试它时,根项目还有一个名为“types.hpp”的头文件,所以当我更改文件名时,一切顺利。

我认为问题还在于两个文件的#ifdef,因为它们也有相同的名称。