私が書いたいくつかのコードで、本当に厄介な問題が発生しています。スタックオーバーフローで同じ問題を抱えている他の人を見つけ、解決策を試しましたが、うまくいきませんでした。
私が使用しているいくつかの一般的な STL 型を型定義しますが、マップを型定義しようとする場合を除いて、他の型に問題はありません。テスト プログラムにヘッダーを含めると、"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"
テスト ファイルには、文字列、ベクター、および my ファイルがこの順序で含まれているだけです。hello world のようなことを行う main メソッドがあります。
面白いことに、テンプレート化されたクラスをすぐにまとめて (" std::map<Column...
" を " "に置き換えてhello<Column...
) 問題がどこにあるかを調べたところ、問題なく動作しました。
<
' ' 演算子のないクラスを使用している場合は、マップに必要な演算子のオーバーロードを既に作成しています。