头文件中的typedef向量size_type

时间:2018-09-15 14:41:29

标签: c++ header typedef

我正在使用Visual Studio(不确定此处是否相关),我想在头文件中为vector<int>::size_type定义typedef。

这是我的标题:

#ifndef UTILS_H
#define UTILS_H

#include "pch.h"
#include <vector>

typedef int myint;
typedef vector<int>::size_type vi_sz;

#endif //UTILS_H

如果我尝试构建它,则会出现以下错误:

...\utils.h(8): error C2143: syntax error: missing ';' before '<'
...\utils.h(8): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
...\utils.h(8): error C2039: 'size_type': is not a member of '`global namespace''

如果我将typedef vector<int>::size_type vi_sz;移至源文件,则一切正常。请注意,我不需要使用typedef int myint;

有没有一种方法可以在标头中定义这种typedef以避免避免为每个源文件定义它?还是这种不好的做法?

2 个答案:

答案 0 :(得分:2)

  

如果我尝试构建它,则会出现以下错误:

请注意此处:

#ifndef UTILS_H
#define UTILS_H

#include "pch.h"
#include <vector>

typedef int myint;
typedef vector<int>::size_type vi_sz;

#endif //UTILS_H

您没有using namespace std;as especially should be the case in header files),但是您写的是vector<int>::size_type而不是std::vector<int>::size_type。因此,该名称无法解析。

  

如果我将typedef vector<int>::size_type vi_sz;移至源文件,则   一切都很好

在.cpp文件中编译时会编译,因为您可能在using namespace std;之前有typedef vector<int>::size_type vi_sz;,因此可以解析名称。简而言之,只需将其保留在您的头文件中,如下所示:typedef std::vector<int>::size_type vi_sz;

答案 1 :(得分:1)

这就像您缺少std名称空间一样。您可以执行以下操作。

  1. using namespace std;

  2. std::vector<int>::size_type

尝试其中一种,将解决您的问题。