Дублирование кода
Вылетает ошибка "2 duplicate symbols for architecture x86_64" в Xcode. Скорее всего из-за неправильного подключения файлов. В чем проблема не совсем понятно.
main.cpp
#include <iostream>
#include "A.hpp"
#include "A.cpp"
#include "B.hpp"
#include "B.cpp"
int main() {
A a;
B b;
a.funC(b);
b.funC(a);
return 0;
}
A.hpp
#ifndef A_hpp
#define A_hpp
#include <stdio.h>
#include <iostream>
#include "B.hpp"
class B;
class A {
int numA = 0;
public:
int getNum () {return numA;}
void funC (B &b);
};
#endif
A.cpp
#include "A.hpp"
void A::funC (B &b) {
std::cout << b.getNum() << std::endl;
}
B.hpp
#ifndef B_hpp
#define B_hpp
#include <stdio.h>
#include <iostream>
#include "A.hpp"
class A;
class B {
int numB = 1;
public:
int getNum () {return numB;}
void funC (A &a);
};
#endif
B.cpp
#include "B.hpp"
void B::funC (A &a) {
std::cout << a.getNum() << std::endl;
}
Ответы (2 шт):
Автор решения: wrench29
→ Ссылка
в #include не нужно подключать файлы *.cpp, исключительно заголовки, то есть *.hpp
Автор решения: Harry
→ Ссылка
Ну и зачем же вы вот это делаете?!
#include "A.hpp"
#include "A.cpp" // !!!!!!!!!!
#include "B.hpp"
#include "B.cpp" // !!!!!!!!!!
В результате функции у вас есть как в main.cpp, так и в ваших a.cpp и b.cpp!
Или компилируете вот такой main.cpp, не подключая в проект a.cpp и b.cpp, или делаете нормальный проект из 3 файлов, не включая *.cpp как заголовочный!