所以我很困惑。尝试实现先前在头文件中声明的方法时,我收到重新定义错误。我在标题中添加了包含防护,但仍然遇到了同样的错误。如果有人能向我解释我没有看到的东西,那就太棒了。
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;
}
答案 0 :(得分:7)
在您的标题文件中,您有:
int method(void) {};
这是一个内联定义,而不是声明。 {}
实际上是为编译器提供(尽管是空的)函数体。如果要在另一个文件中定义该函数,请删除{}
。
此外,您#include "thing.cpp"
文件的顶部有#include "thing.hpp"
而不是main.cpp
。
答案 1 :(得分:1)
在main.cpp中你需要改变:
#include "thing.cpp"
为:
#include "thing.hpp"