У меня очень неприятная проблема с кодом, который я написал. Я нашел кого-то другого, у которого была такая же проблема в stackoverflow, и я попробовал решения, но никто не работал для меня.C++ STL map typedef ошибки
Я набрал несколько обычных типов STL, которые я использую, и ни у кого из других проблем нет, кроме как при попытке набрать карту. Я получаю сообщение «some_file.h: 83: error: expected initializer before» < «токен» при включении моего заголовка в тестовую программу.
Вот важная часть заголовка (some_file.h):
#ifndef SOME_FILE_H
#define SOME_FILE_H
// some syntax-correct enums+class prototypes
typedef std::string str;
typedef std::vector<Column> col_vec;
typedef col_vec::iterator col_vec_i;
typedef std::vector<Row> row_vec;
typedef row_vec::iterator row_vec_i;
typedef std::vector<str> str_vec;
typedef str_vec::iterator str_vec_i;
typedef std::vector<Object> obj_vec;
typedef obj_vec::iterator obj_vec_i;
typedef std::map<Column, Object> col_obj_map; // error occurs on this line
typedef std::pair<Column, Object> col_obj_pair;
включает в some_file.cpp являются:
#include <utility>
#include <map>
#include <vector>
#include <iostream>
#include <string>
#include <stdio.h>
#include <cc++/file.h>
#include "some_file.h"
Тестовый файл просто включает строку, вектор, и мой файл в этом порядке. У этого есть основной метод, который только приветствует мир.
Самое смешное, что я быстро собрал шаблонный класс, чтобы увидеть, где проблема (заменив «std::map<Column...
» на «hello<Column...
»), и это сработало без проблем.
Я уже создал перегрузку оператора, требуемую картой, если вы используете класс без оператора '<
'.
Какое сообщение об ошибке вы получили? –
Я бы сказал, что это хороший пример злоупотребления 'typedef'. –
И я бы сказал, что намного проще выписать col_vec вместо std :: vector. То же самое касается итератора, col_vec_i означает для меня гораздо больше, чем std :: vector :: iterator. Это может быть «жестокое обращение», но это облегчает мне жизнь. –
user150113