交叉引用类和返回映射<string,class =“”>

时间:2015-09-07 08:58:10

标签: c++ dictionary

有两个问题我似乎无法弄清楚,输入值得赞赏。

在我的计划中,有两个班级ParserRules。在课程Parser中,我应该使用extract_rules()函数返回包含规则的地图,但我遇到两个问题:

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

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

  3. 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。

2 个答案:

答案 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(){}