有两个问题我似乎无法弄清楚,输入值得赞赏。
在我的计划中,有两个班级Parser
和Rules
。在课程Parser
中,我应该使用extract_rules()
函数返回包含规则的地图,但我遇到两个问题:
如何在Rules
文件中引用parser.h
?需要使用规则,因为extract_rules()
函数应返回map<int, Rules>
仅#include rules.h
触发另一串错误...
当map<int, Rules>
的返回类型设置为extract_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。
答案 0 :(得分:1)
尝试写作
#pragma once
在rules.h的开头,然后将其包含在parser.h中 我也看不到
#include <map>
也应该在parser.h中。
答案 1 :(得分:1)
您必须使用宏来限制每个头文件中的多个包含(头文件),如下所示: -
#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(){}