我正在尝试这段代码
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
我不明白这是什么错误,有人可以帮我解决这个错误吗?
答案 0 :(得分:2)
请勿#include
源文件!
在你的情况下(我只在这里猜测)文件demo.cpp
是项目的一部分,因此它被编译和链接以创建可执行文件。问题是,由于您还将源文件作为头文件包含在内,因此该函数也在main.cpp
中定义。
在main.cpp
中,您应该包含标题文件demo.hpp
。