gpt4 book ai didi

C++ 类相互依赖导致循环依赖错误

转载 作者:行者123 更新时间:2023-11-28 00:47:37 29 4
gpt4 key购买 nike

我的搜索让我相信我遇到的问题称为循环冗余。我不明白发布的任何解决方案。我是 C++ 的(相当)新手,具有很强的 Java 背景。

基本上有两个相互依赖的类。 A 类包含 B 类对象的 vector ,B 类包含需要 A 类对象作为输入的方法。

这是重现问题的代码。

根据 codelite g++,错误在 school.h 中,是“person was not declared in this scope”。它还说“模板参数 1 无效”和“模板参数 2 无效”。然后是其他几个,关于所有被调用的 vector 函数的非类类型“int”。

主要.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;
}

学校.h

#ifndef SCHOOL_H
#define SCHOOL_H
#include <vector>
#include "person.h"

class school
{
public:
school();
~school();

std::vector<person> personVect;


};

#endif // SCHOOL_H

学校.cpp

#include "school.h"    
school::school(){}
school::~school(){}

人.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

人.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;
}

最佳答案

可以通过更好地设计类关系来解决这个问题。

Person 不是由 School 组成的,因此它不需要有 School 成员。

一个 School 有一个 Person 对象的集合。

如果您希望某人为学校做某事,请将其作为参数传递。这样您就可以使用指针前向声明来解决问题。

// Person.h
class School; // Forward declare school type.

// Person.cpp
Person::DoSomethingWithSchool(School* school);

关于C++ 类相互依赖导致循环依赖错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15675351/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com