C ++中的重新定义,头文件中的先前定义?

时间:2014-11-17 09:20:00

标签: c++ header include guard redefinition

所以我很困惑。尝试实现先前在头文件中声明的方法时,我收到重新定义错误。我在标题中添加了包含防护,但仍然遇到了同样的错误。如果有人能向我解释我没有看到的东西,那就太棒了。

  

main.cpp中包含的文件:2:           ./thing.cpp:7:12:错误:重新定义'方法'           int Thing :: method(void)                      ^           ./thing.hpp:12:6:注意:之前的定义就在这里                   int method(void){};                       ^

- 编辑 -

我现在得到以下内容:

  

重复符号__ZN5Thing6methodEv in:       main.o       thing.o ld:1个用于体系结构x86_64的重复符号

thing.hpp:

#ifndef THING_H
#define THING_H

class Thing {

public:
        int a;
        int b;
        char c;

        int method(void) {};
        Thing(int anA, int aB, char aC): a(anA), b(aB), c(aC) {};


};

#endif

thing.cpp

#include <iostream>
#include <stdio.h>
#include "thing.hpp"

using namespace std;

int Thing::method(void)
{
        return 5;

}

的main.cpp

#include <iostream>
#include "thing.cpp"

using namespace std;

Thing* thing = new Thing(5,5,'c');

int main(int argc, char ** argv)
{
        cout << thing->method() <<endl;

}

2 个答案:

答案 0 :(得分:7)

在您的标题文件中,您有:

int method(void) {};

这是一个内联定义,而不是声明。 {}实际上是为编译器提供(尽管是空的)函数体。如果要在另一个文件中定义该函数,请删除{}

此外,您#include "thing.cpp"文件的顶部有#include "thing.hpp"而不是main.cpp

答案 1 :(得分:1)

在main.cpp中你需要改变:

#include "thing.cpp"

为:

#include "thing.hpp"