我正在使用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以避免避免为每个源文件定义它?还是这种不好的做法?
答案 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
名称空间一样。您可以执行以下操作。
using namespace std;
std::vector<int>::size_type
尝试其中一种,将解决您的问题。