【发布时间】:2017-08-13 20:09:15
【问题描述】:
gcc 版本 5.4.0 (GCC)
> g++ -std=c++11
在构建过程中,我收到一个类构造函数的多重定义错误消息。当我删除构造函数时,我收到一条未定义的符号错误消息。我被难住了。
NodeClass::NodeClass( ... ) 被标记为
错误信息:
build/Debug/Cygwin64-Windows/nodeClass.o: In function `__gnu_cxx::new_allocator<std::string*>::~new_allocator()':
/c/home/skidmarks/Projects/MPHASH/mphash/NodeClass.cpp:36: multiple definition of `NodeClass::NodeClass(std::vector<std::string*, std::allocator<std::string*> >&)'
build/Debug/Cygwin64-Windows/NodeClass.o:/c/home/skidmarks/Projects/MPHASH/mphash/NodeClass.cpp:36: first defined here
头文件:
# include <vector>
# include <gslip/SlipPointer.h>
class NodeClass : public SlipPointer
{
private:
vector<string*> vec;
public:
NodeClass(vector<string*>& vec);
virtual ~NodeClass() { };
private:
NodeClass(const NodeClass& orig) { };
};
源代码:
# include <vector>
# include "NodeClass.h"
using namespace std;
using namespace slip;
NodeClass::NodeClass(vector<string*>& vec) :
SlipPointer(new string("Cluster Node")), vec(vec) {}
【问题讨论】:
-
缺少标题包括警卫?
-
这可能会有所帮助。 stackoverflow.com/questions/12573816/….
-
@user0042 :警卫在那里。 @R Sahu:链接处理未定义的符号。这是一个双重定义的符号。
-
@ArthurSchwarez 请提供minimal reproducible example。
-
@ArthurSchwarez - 你有 not 在你的代码 sn-ps 中显示“标题包含”保护,而不是在任何一个文件中。您是否建议它们在您的代码中?如果是这样,你为什么不包括他们?标头保护是开发人员选择的格式。对于文件 NodeClass.h,我的将是“#ifndef NODECLASS_H”。