gpt4 book ai didi

c++ - 如何避免两个不同头文件中的 typedef 冗余?

转载 作者:太空宇宙 更新时间:2023-11-04 13:39:51 26 4
gpt4 key购买 nike

我试图理解并使用其他人编写的代码,但由于我对 typedef 经验不多。 , 我有时会感到困惑。

有两个不同的头文件,一个继承另一个,并且在两个文件上声明相同的typedef。

为什么会出现冗余,如何避免?

header_one.h:

#include "header_two.h"
....

typedef std::map<std::string, StructName> RedundantTypedef;
....

class HeaderOneClass....

header_two.h:

....
struct StructName...
class HeaderTwoClass
{
public:
typedef std::map<std::string, StructName> RedundantTypedef;

std::map<std::string, StructName> getTypedefedDataStructure()
...

这里有两个我不明白的基本问题:

  1. 当我使用 RedundantTypedef对于 getTypedefedDataStructure() 的返回类型,我得到一个编译器错误:‘RedundantTypedef’没有命名类型。这个问题可以通过正确使用 :: 来解决。范围分辨率。我理解那部分。
  2. 当我搬家时typedef std::map<std::string, StructName> RedundantTypedef;外面HeaderTwoClass所以我不必使用相同的 typedefheader_one.h我再次收到错误消息。错误:“RedundantTypedef”未在此范围内声明

typedefs的正确排列应该是怎样的?所以我没有得到任何错误,并且能够将它用作 getTypedefedDataStructure() 的返回类型

解决方案:

我发现为什么会出现案例 1 的错误。我正在移动 typedef std::map<std::string, StructName> RedundantTypedef;struct 之上声明,自此typedef包含 struuct StructName在其内部,编译器会报告错误。

感谢大家的帮助。我应该保留这个问题,还是应该删除它?

最佳答案

避免名称冲突的最简单方法是在标题页范围内创建命名空间。这是我必须为期末考试创建的杂货店数据库的示例。

//文件:store.h//存储购买的元素

#ifndef STOREITEM_H
#define STOREITEM_H

#include "getItem.h"

namespace groceryStore
{
class StoreItem
{
public:
StoreItem();
StoreItem(Buying product, int quantity);
Buying getId() const;
int getQuantity() const;
double getTotal() const;
void increaseQuantity();
bool operator == (StoreItem & o);
private:
int quantity;
Buying product;
};
}

#endif

我有 5 个类使用 dArray 来存储、计算、获取、存储等。每个.h 文件或类文件都有自己的命名空间,并通过::运算符访问,例如

// PRE: Must be called
// POST: Will return the id
groceryStore::Buying groceryStore::StoreItem::getId() const
{
return product; // change to id
}

以上是获取产品ID的函数。通过让每个类都有自己的命名空间,我可以在整个程序中使用多个 getID() 函数,这些函数在类中获取它们的特定私有(private)数据。我需要更改的只是相应类的命名空间的 groceryStore 命名空间。

使用命名空间是非常必要的,因为一个大型程序被分成多个团队,并且在这些团队中有通用名称,例如“数据”、"file"或相互冲突的非唯一名称。通过使用 namespace ,它可以防止冲突,使生活变得非常简单。

关于c++ - 如何避免两个不同头文件中的 typedef 冗余?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28131809/

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