为什么我不能定义在同一文件中已向前声明的成员函数?

时间:2016-10-31 08:23:40

标签: c++ xcode

我正在开展一个项目,过去我曾经使用过Xcode,并且已经采取行动了#34;最近(可能是我)。以下代码是此问题的测试代码(不是我的项目)。

(假设所有词汇/预处理/命名空间指令都在那里。)

在Foo.hpp

class Foo {
public:
    Foo();
};

Foo::Foo() {
    cout << "constructive" << endl;
}

现在,如果我运行构造Foo对象的main,它会给出重复符号的链接器错误。我该如何解决这个问题?

3 个答案:

答案 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文件中,但将其发送给人员并不是最好的。

我的新问题是为什么这有效?