交叉引用类并返回映射<字符串,类>

Cross reference-class and return map<string, Class>

本文关键字:lt gt 字符串 映射 引用 返回      更新时间:2023-10-16

有两个问题我不太明白,请多指教。

在我的程序有两个类ParserRules。在Parser类中,我应该使用extract_rules()函数返回带有规则的映射,但我遇到了两个问题:

  1. 如何在parser.h文件中引用Rules ?规则是需要的,因为extract_rules()函数应该返回map<int, Rules>只做#include rules.h触发另一串错误…

  2. extract_rules()的返回类型设置为map<int, Rules>时,有一个编译错误,我该如何解决这个问题?如果返回类型为void,则不会遇到任何问题,程序可以正常运行。

rules.h

Class Rules
{
public:
string rule_name;
string function_name;
}

parser.h

Class Parser
{
public:
map<int, Rules> extract_rules();
}

parser.cpp

using namespace std;
map<int, Rules> extract_rules()
{
map<int, Rules> rules_map;
int count;
Rules r;
r.rule_name = "Rule 1";
r.function_name = "Function 1";
rules_map.emplace(count, r);
return rules_map;
}

提醒不要在累的时候编码:忘记在Rules.h中设置#include <map>。谢谢每一个人。Upvoted .

您必须使用宏来限制每个头文件中的多个包含(头文件),如下所示:-

#ifndef RULES_H
#define RULES_H
#include <map> //header file for map
#include <string> //header file for string
using namespace std;

#endif //RULES_H
您必须在parser.cpp中定义函数,如下所示:-
map<int, Rules> Parser::extract_rules(){}

试着写

#pragma once

放在rules.h的开头,然后将其包含在parser.h中我也看不见

#include <map>

也应该在parser.h.