实现boost函数指针时出错LNK2005

时间:2016-02-28 12:25:24

标签: c++ function pointers boost

我正在尝试这段代码

demo.hpp

#include <boost/function.hpp>
#include <boost/bind.hpp>

using namespace std;

typedef boost::function<int(int,int)>func;

class funcPointer
{
public:

    void add_call(func);
};

demo.cpp

#include <iostream>
#include "demo.hpp"

void funcPointer::add_call(func f)
{
    cout << "Result of add: " << f(5,7) <<endl;
}

的main.cpp

#include "demo.cpp"

int add(int x,int y)
{
    cout << "x: " << x <<endl;
    cout << "y: " << y <<endl;

    return x + y;
}

int main()
{
    funcPointer *fun = new funcPointer;

    fun->add_call(boost::bind(add, _1, _2));    

    return 0;
}
编译时

我收到以下错误:

demo.obj : error LNK2005: "public: void __thiscall funcPointer::add_call(class boost::function<int __cdecl(int,int)>)" (?add_call@funcPointer@@QAEXV?$function@$$A6AHHH@Z@boost@@@Z) already defined in main.obj
E:\vs_c++\boost_func_ptr\Debug\boost_func_ptr.exe : fatal error LNK1169: one or more multiply defined symbols found

我不明白这是什么错误,有人可以帮我解决这个错误吗?

1 个答案:

答案 0 :(得分:2)

请勿#include源文件!

在你的情况下(我只在这里猜测)文件demo.cpp是项目的一部分,因此它被编译和链接以创建可执行文件。问题是,由于您还将源文件作为头文件包含在内,因此该函数也在main.cpp中定义。

main.cpp中,您应该包含标题文件demo.hpp