Мои поиски заставили меня поверить, что проблема, которую я испытываю, называется циклической избыточностью. Я не понимаю ни одного из выпущенных решений. Я (довольно) новичок в C++, исходя из сильного фона Java.Классы C++, зависимые друг от друга, вызывающие ошибку циклической зависимости
В принципе, существуют два класса, которые зависят друг от друга. Класс A содержит вектор объектов класса B, а класс B содержит методы, для которых объекты класса A являются входными.
Вот код, который воспроизводит проблему.
В соответствии с коделитом g ++ ошибка находится в school.h и «человек не был объявлен в этой области». Он также говорит, что «аргумент шаблона 1 недействителен» и «аргумент шаблона № 2 недействителен». Затем пара других, о неклассовом типе «int» для всех векторных функций, которые вызываются.
main.cpp
#include <iostream>
#include <string>
#include "person.h"
#include "school.h"
int main() {
person p;
school s;
std::cout << p.name << std::endl;
s.personVect.push_back(p);
std::cout << s.personVect.size() << std::endl;
std::cout << s.personVect.at(0).name << std::endl;
p.test();
return 0;
}
school.h
#ifndef SCHOOL_H
#define SCHOOL_H
#include <vector>
#include "person.h"
class school
{
public:
school();
~school();
std::vector<person> personVect;
};
#endif // SCHOOL_H
school.cpp
#include "school.h"
school::school(){}
school::~school(){}
person.h
#ifndef PERSON_H
#define PERSON_H
#include <string>
#include <vector>
#include "school.h"
class person {
public:
std::string name;
std::string phone;
school doSomethingWithSchool();
void test();
person();
~person();
};
#endif // PERSON_H
person.cpp
#include "person.h"
#include <iostream>
using namespace std;
person::person()
{
name = "marcus";
phone = "0400000000";
}
person::~person()
{
}
void person::test() {
cout << this->name;
}
school person::doSomethingWithSchool() {
school s;
}
Вы забыли задать вопрос. «Что мне делать, если мне нужна эта функциональность?»? – Vesper