Поэтому я смущен. Я получаю ошибку переопределения при попытке реализовать метод, ранее объявленный в файле заголовка. Я добавил включить охранников в заголовок и по-прежнему получил ту же ошибку. Если бы кто-то мог объяснить мне, что я не вижу, это было бы фантастически.
В файле, включенном в main.cpp: 2:./thing.cpp:7:12: ошибка: переопределение "метода" int Thing :: method (void) ^./thing.hpp:12:6: note: предыдущее определение здесь int method (void) {}; ^
--РЕДАКТИРОВАТЬ--
Теперь я получаю следующее:
дублирующий символ __ZN5Thing6methodEv в: 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;
}
В вашем файле заголовка:
int method(void) {};
Это встроенное определение, а не декларация. {}
Фактически предоставляет кумулятивную функцию (хотя и пустую) компилятору. Удалите {}
если вы хотите определить функцию в другом файле.
Кроме того, у вас есть #include "thing.cpp"
а не #include "thing.hpp"
в верхней части файла main.cpp
.
В main.cpp вам нужно изменить:
#include "thing.cpp"
чтобы:
#include "thing.hpp"
thing.cpp
в main.cpp?