我正在开展一个项目,过去我曾经使用过Xcode,并且已经采取行动了#34;最近(可能是我)。以下代码是此问题的测试代码(不是我的项目)。
(假设所有词汇/预处理/命名空间指令都在那里。)
在Foo.hpp
class Foo {
public:
Foo();
};
Foo::Foo() {
cout << "constructive" << endl;
}
现在,如果我运行构造Foo对象的main,它会给出重复符号的链接器错误。我该如何解决这个问题?
答案 0 :(得分:2)
快速而肮脏的解决方法是编写
inline Foo::Foo(){
或完全定义类定义中的函数:
public:
Foo(){cout << "constructive" << endl;}
更好的解决方法是确保构造函数定义仅在一个翻译单元中编译;即把它放在一个源文件中。
答案 1 :(得分:1)
您需要将该函数声明为内联:
class Foo {
public:
inline Foo();
};
或将其放在.cpp文件中,以确保它只在一个翻译单元中定义:
// foo.cpp
Foo::Foo() {
cout << "constructive" << endl;
}
答案 2 :(得分:-2)
哦,看起来我找到了答案。我所做的只是删除Foo.cpp,它解决了这个问题。此外,我可以将定义放在.cpp文件中,但将其发送给人员并不是最好的。
我的新问题是为什么这有效?