gpt4 book ai didi

c++ - 如何将 A 实现到 B 并将 B 实现到 A(不创建循环)?

转载 作者:行者123 更新时间:2023-11-30 01:34:19 24 4
gpt4 key购买 nike

我正在学习 C++,我正在尝试创建一个“在线商店”,您可以在其中发布文章并对其发表评论,评论属于一篇文章,一篇文章可以有很多评论,但我现在不知道如何在不创建循环的情况下对其进行编码

我试过使用 Article.h -> #include "Comment.h"反之亦然,但是当我尝试编译时,它会创建一个循环,其中 A 导入 B,B 导入 A

评论.h

#include <string>

//This is what I've tried but it creates a loop
#include "Article.h"


using namespace std;
//Class
class Comment
{
private:
Article article;
string description;
string rating;
};

文章.h


#include <string>
#include <map>

//The other part of my buggy-loop
#include "Comentario.h"

class Article
{
private:
map<string, int> art_comments;
string name;
string rating;
};

更新

谢谢大家,我的问题用 Resolve build errors due to circular dependency amongst classes 解决了你给了我

这个问题解决得比较早,我要不要删帖?

最佳答案

你需要退一步。

你需要先分析你想做什么,然后再想想你能做什么。然后你会这样做(编写代码)然后你会测试它。实际上还有更多的步骤。

那么让我们从内容开始吧。您有一些具有关系的实体。所以你有

  • “在线商店”
  • “文章”和
  • “文章”的“评论”

那是你的实体或对象。这些实体有关系

  • 在线商店有 0 或 1 或多篇文章
  • 现有文章可以有 0 条或 1 条或多条评论

因此,您想存储 0 或 1 或许多“东西”。为了存储这样的“东西”,C++ 在 STL 中提供了容器。例如 std::vector 或 std::list。您需要了解这些容器的属性并选择最适合您的容器。在这种情况下,它肯定是一个 std::vector。它可以包含 0 个或多个元素,并且可以动态增长。

对于 C++ 和面向对象语言中的关系,主要使用所谓的“has a”或“is a”属性。 “是一个”关系是用派生模型建模的,“有一个”类型是通过所谓的包含模型。

例子:

#include <string>
#include <vector>

// "Is a"-relation. Done by deriving from base class Shape
struct Shape
{
std::string name;
};
// A line is a shape
struct Line : public Shape
{
int length;
};

// "Has a"-relation. Done by containment. Class online Shop contains articles
struct Article
{
std::string articleName;
};
struct OnlineShop
{
std::string shopName;
std::vector<Article> article;
};


int main()
{
Line line{ "long line",12345 };

std::string myShopName{ "My Shop" };
std::vector<Article> myArticles{ Article{ "Apple"}, Article{"Banana"} };
OnlineShop myOnlineShop{ myShopName, myArticles };

return 0;
}

现在你可能明白一点了。

因此对于您的解决方案,在考虑实体和关系之后,您可能会得出一个可能的解决方案:

  • 您将创建一个类 OnlineStore
  • 您将创建一个类(class)文章
  • 还有一个类评论

由于可能有很多文章和评论,您会将它们放在一个 std::vector 中。类 OnlineShop 将包含类文章,类文章将包含类评论。

因此不会有循环依赖。在大多数情况下,循环引用是设计缺陷的指标。

下面显示了这种实现的框架:

#include <string>
#include <vector>

struct Comment
{
std::string commentText{};
std::string commentAuthor{};
};
struct Article
{
std::string articleName{};
std::vector<Comment> comment{};
};
struct OnlineShop
{
std::vector<Article> article{};
};

int main()
{
OnlineShop onlineShop{};
return 0;
}

请根据此方法定义您的类。然后添加所需的功能。

另请阅读面向对象编程的原则。

希望对您有所帮助。 . .

关于c++ - 如何将 A 实现到 B 并将 B 实现到 A(不创建循环)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56565958/

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