typedef vector size_type в заголовочном файле - PullRequest
0 голосов
/ 15 сентября 2018

Я использую Visual Studio (не уверен, что это уместно здесь), я хочу определить typedef для vector<int>::size_type в заголовочном файле.

Это мой заголовок:

#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 голосов
/ 15 сентября 2018

Как будто вам не хватает std пространства имен.Вы можете сделать следующее.

  1. using namespace std;

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

Попробуйте либо:решит ваши проблемы.

0 голосов
/ 15 сентября 2018

Если я пытаюсь его построить, я получаю следующие ошибки:

Обратите внимание, что здесь:

#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; ( как и должно быть в заголовочных файлах ), и все же вы пишете 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;

...