Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+中的编译错误+; 我用C++编写了一个名为“MyProtol”的库,使用Qt C造饰器作为IDE,编写了正常的make命令,在一个独立的项目中测试了该库作为测试平台,库工作得很好。p>_C++_Boost - Fatal编程技术网

C+中的编译错误+; 我用C++编写了一个名为“MyProtol”的库,使用Qt C造饰器作为IDE,编写了正常的make命令,在一个独立的项目中测试了该库作为测试平台,库工作得很好。p>

C+中的编译错误+; 我用C++编写了一个名为“MyProtol”的库,使用Qt C造饰器作为IDE,编写了正常的make命令,在一个独立的项目中测试了该库作为测试平台,库工作得很好。p>,c++,boost,C++,Boost,后来我尝试在另一个项目中使用该库,该项目使用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: expec

后来我尝试在另一个项目中使用该库,该项目使用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);
这是CDB请求的定义:

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;

};

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

我找到了问题的根源:

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

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


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

请为声明了
运算符&
的上下文发布更多的代码。如果我想发布其余的代码,它将非常长。我现在做的是删除了那行代码,并尝试以不同的方式实现它的功能。但现在我有了一个更奇怪的新问题,一些头文件无法被项目看到。我正确地定义了范围,但是我看不到这些文件中的声明,好像它们不存在一样。对于那些“#ifdef”,我想你是指include-guard,对吧?如果是这样的话,请养成添加一些伪随机数据(例如,时间戳的散列)或其他一些使名称冲突的可能性更小的数据的习惯。记住,它们不一定要可读,而只是唯一的!是的,这正是我的意思,包括警卫,我会接受你的小费。
b2 variant=release link=static toolset=gcc include=/home/HA/myprotocol/ linkflags="-L /home/HA/myprotocol/ -lmyprotocol"