我碰巧得到了 .obj 错误中已经定义的那个。这是我的项目的结构:
主文件
#include "main.h";
主文件
#include <iostream>
#include <string>
#include <sstream>
#include <boost/asio.hpp>
#include <boost/thread/thread.hpp>
#include "client.cpp"
客户端.cpp
#ifndef SOCKET_CLIENT_CLASS
#define SOCKET_CLIENT_CLASS
#ifndef BOOST_ASIO_HPP
#include <boost/asio.hpp>
#endif
/*CLASS DEFINITION HERE*/
#endif
这就是编译器所抱怨的:
main.obj : 错误 LNK2005: "public: bool __thiscall SocketClient::read (int,char *)" (?read@SocketClient@@QAE_NHPAD@Z)已经在 client.obj 中定义
请注意,它是在抱怨我的课程,而不是提升。一件有趣的事情是,当我#include <boost/asio.hpp>
从client.cpp中删除时,我会收到错误,尽管它也包含在 main.h 中。
如您所见,我没有双重定义/包括我的课程,它在main.h中只包含一次。那么这里发生了什么?
我已经阅读了这个答案,但它没有帮助,因为它需要双重包含。在投票支持重复之前考虑这个事实,因为这仅仅意味着毫不留情地斩首我。