5

エラーを理解するのに苦労しています。ベクトルの単純なマップを使用しています (文字列でキーを設定し、文字列のベクトルを格納します):

typedef std::map<std::string, std::vector<std::string> > TRouteMarkets;

次のコード (削除)、

void CFoo::Bar(const char* route, const char* market)
{
    // ...

    TRouteMarkets::key_type key(route);
    TRouteMarkets::mapped_type mapped();
    TRouteMarkets::value_type pair(key, mapped);

    // ...
}

次のエラーが発生します。

"Foo.cc"、518 行目: エラー: std::pair<const std::string, std::vector<std::string>>::pair(const std::string, std の一致が見つかりませんでした::vector<std::string>()) CFoo::Bar(const char*, const char*) に必要です。

しかし、()マップからを削除します。つまり、

TRouteMarkets::mapped_type mapped;

エラーを修正します。なんで?mappedどちらの場合も、文字列の空のベクトルではありませんか?

4

2 に答える 2

7

これは実際には関数宣言です:

TRouteMarkets::mapped_type mapped();

mapped引数を受け入れず、 を返すという名前の関数を宣言しますTRouteMarkets::mapped_type

于 2013-04-26T14:37:16.657 に答える
5

最も厄介な解析問題に遭遇しました。

TRouteMarkets::mapped_type mapped();

上記の行はmapped、引数をとらず、 type のオブジェクトを返すという名前の関数を宣言していますTRouteMarkets::mapped_type

C++11 では、統一された初期化構文を使用してこの問題を回避できます。

TRouteMarkets::mapped_type mapped{}; // Not a function declaration anymore
于 2013-04-26T14:38:42.430 に答える