Как вы можете видеть, название немного глупо, потому что я действительно не знаю, как это назвать, но знаю, что я старался найти лучший заголовок. Надеюсь, вы понимаете, что я пытаюсь сказать, видя остальную часть вопроса.«Обмен» включает в себя
Предположим, что у меня есть 3 класса: «A», «B» и «C».
The class "A" includes "B" and "C".
The class "B" includes "A"
The class "C" includes "A"
Пойдемте код ...
#include <iostream>
#include <b.hpp>
#include <c.hpp>
class A
{
public:
A()
{
std::cout << "Hello from A" << std::endl;
A a;
B b;
}
};
#include <iostream>
#include <a.hpp>
class B
{
public:
B()
{
std::cout << "Hello from B" << std::endl;
}
};
#include <iostream>
#include <a.hpp>
class C
{
public:
C()
{
std::cout << "Hello from C" << std::endl;
}
};
Таким образом, все работает отлично, выход:
Hello from A Hello from B Hello from C
НО, если я могу это сделать:
#include <iostream>
#include <a.hpp>
#include <vector>
class B
{
public:
B()
{
std::cout << "Hello from B" << std::endl;
}
private:
std::vector<A> garage;
};
У меня есть каскад ошибок, включая этот (на самом деле, t он главный, из-за этого один, есть и другие):
error: 'A' was not declared in this scope
std::vector garage;
Это именно то, что я хочу, у вас есть представление о том, что я могу сделать? Спасибо.
@edit - Как ответ на @Kerrek SB
Я попытался создать отдельные файлы для каждого из них, заголовка и источников. (.hpp и .cpp), и ошибка сохраняется.
A.hpp
#ifndef A_HPP
#define A_HPP
#include <iostream>
#include <B.hpp>
#include <C.hpp>
class A
{
public:
A();
};
#endif
a.cpp
#include <A.hpp>
A::A()
{
std::cout << "Hello from A" << std::endl;
B b;
C c;
}
B.hpp
#ifndef B_HPP
#define B_HPP
#include <iostream>
#include <A.hpp>
#include <vector>
class B
{
public:
B();
private:
std::vector<A> garage;
};
#endif
B.cpp
#include <B.hpp>
B::B()
{
std::cout << "Hello from B" << std::endl;
}
C.hpp
#ifndef C_HPP
#define C_HPP
#include <iostream>
#include <A.hpp>
class C
{
public:
C();
};
#endif
C.cpp
#include <C.hpp>
C::C()
{
std::cout << "Hello from C" << std::endl;
}
main.cpp
#include <iostream>
#include <A.hpp>
int main(int argc, char ** argv)
{
A a;
return 0;
}
GCC
g++ -O2 -std=c++11 -I"." -o exchange A.cpp B.cpp C.cpp main.cpp
выход
In file included from ./A.hpp:5:0,
from ./C.hpp:5, from C.cpp:1:
./B.hpp:13:17: error: 'A' was not declared in this scope
std::vector<A> garage;
у вас есть #include в вашем фактическом коде? –
suspectus
Да, я это сделал, это была ошибка. –