在 header 中添加 typedef 时出错
Error when adding typedef in header
我是 C++ 的新手,我正在学习 Accelerated C++(对于任何有这本书的人,我正在尝试 运行 §7.4 中描述的程序)
我正在查看的程序使用了一些 typedef - 我收集到如果我将它们添加到 header 文件,任何包含 header 的源文件都将能够使用 typedef也是。
我的 header 是:
#ifndef READ_GRAMMAR_H_INCLUDED
#define READ_GRAMMAR_H_INCLUDED
typedef std::vector<std::string> Rule;
typedef std::vector<Rule> Rule_collection;
typedef std::map<std::string, Rule_collection> Grammar;
Grammar read_grammar(std::istream& in);
#endif // READ_GRAMMAR_H_INCLUDED
这是给我的错误 error: 'map' in namespace 'std' does not name a type
如果我将第三个 typedef 更改为 typedef std::vector<Rule_collection> Grammar;
(不是我想要的,只是为了举例)它构建时没有错误。
知道问题出在哪里吗?我不知道我是否以错误的方式做一些微不足道的事情,或者整个方法是否不正确
它说在命名空间 std
中找不到 map
。您需要包含它以便编译器可以找到它。同样,您需要为 std::vector
std::string
和 std::istream
:
添加 headers
#ifndef READ_GRAMMAR_H_INCLUDED
#define READ_GRAMMAR_H_INCLUDED
#include <map>
#include <vector>
#include <string>
#include <istream>
typedef std::vector<std::string> Rule;
typedef std::vector<Rule> Rule_collection;
typedef std::map<std::string, Rule_collection> Grammar;
Grammar read_grammar(std::istream& in);
#endif // READ_GRAMMAR_H_INCLUDED
如果您有勇气,您可能还想阅读前向声明 - 它们的用法、优点和缺点,但我怀疑在这种特殊情况下是否需要它。
你必须包含头文件,如果你没有包含它们那么你的程序将如何使用它?
#ifndef READ_GRAMMAR_H_INCLUDED
#define READ_GRAMMAR_H_INCLUDED
#include <istream>
#include <string>
#include <vector>
#include <map>
typedef std::vector<std::string> Rule;
typedef std::vector<Rule> Rule_collection;
typedef std::map<std::string, Rule_collection> Grammar;
Grammar read_grammar(std::istream& in);
#endif // READ_GRAMMAR_H_INCLUDED
我是 C++ 的新手,我正在学习 Accelerated C++(对于任何有这本书的人,我正在尝试 运行 §7.4 中描述的程序)
我正在查看的程序使用了一些 typedef - 我收集到如果我将它们添加到 header 文件,任何包含 header 的源文件都将能够使用 typedef也是。
我的 header 是:
#ifndef READ_GRAMMAR_H_INCLUDED
#define READ_GRAMMAR_H_INCLUDED
typedef std::vector<std::string> Rule;
typedef std::vector<Rule> Rule_collection;
typedef std::map<std::string, Rule_collection> Grammar;
Grammar read_grammar(std::istream& in);
#endif // READ_GRAMMAR_H_INCLUDED
这是给我的错误 error: 'map' in namespace 'std' does not name a type
如果我将第三个 typedef 更改为 typedef std::vector<Rule_collection> Grammar;
(不是我想要的,只是为了举例)它构建时没有错误。
知道问题出在哪里吗?我不知道我是否以错误的方式做一些微不足道的事情,或者整个方法是否不正确
它说在命名空间 std
中找不到 map
。您需要包含它以便编译器可以找到它。同样,您需要为 std::vector
std::string
和 std::istream
:
#ifndef READ_GRAMMAR_H_INCLUDED
#define READ_GRAMMAR_H_INCLUDED
#include <map>
#include <vector>
#include <string>
#include <istream>
typedef std::vector<std::string> Rule;
typedef std::vector<Rule> Rule_collection;
typedef std::map<std::string, Rule_collection> Grammar;
Grammar read_grammar(std::istream& in);
#endif // READ_GRAMMAR_H_INCLUDED
如果您有勇气,您可能还想阅读前向声明 - 它们的用法、优点和缺点,但我怀疑在这种特殊情况下是否需要它。
你必须包含头文件,如果你没有包含它们那么你的程序将如何使用它?
#ifndef READ_GRAMMAR_H_INCLUDED
#define READ_GRAMMAR_H_INCLUDED
#include <istream>
#include <string>
#include <vector>
#include <map>
typedef std::vector<std::string> Rule;
typedef std::vector<Rule> Rule_collection;
typedef std::map<std::string, Rule_collection> Grammar;
Grammar read_grammar(std::istream& in);
#endif // READ_GRAMMAR_H_INCLUDED