我编写的一些代码遇到了一个非常讨厌的问题。我发现其他人在 stackoverflow 上遇到了同样的问题,我尝试了解决方案,但没有一个对我有用。
我对我正在使用的几种常见 STL 类型进行了 typedef,除了我尝试对地图进行 typedef 时,其他都没有任何问题。在测试程序中包含我的标头时,我收到“some_file.h:83: error: expected initializer before '<' token”错误。
这是标头(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"
测试文件按顺序仅包含字符串、向量和我的文件。它有一个 main 方法,它只是做一个 hello world 之类的事情。
有趣的是,我很快将一个模板类放在一起以查看问题出在哪里(将“ std::map<Column...
”替换为“ hello<Column...
”)并且它没有问题地工作。
如果您使用的类没有 ' <
' 运算符,我已经创建了映射所需的运算符重载。