0
void FakeMas::initLSRKeys() {
    const char* lsrKeysInit[]= {
        "platform.enhancedmetadata.categories.baseurl",
        "platform.enhancedmetadata.eventresolution.baseurl",
        "platform.enhancedmetadata.image.baseurl",
        "platform.enhancedmetadata.ondemands.baseurl",
        "platform.enhancedmetadata.programmes.baseurl",
        "platform.enhancedmetadata.recommend.baseurl",
        "platform.enhancedmetadata.schedule.baseurl",
        "platform.enhancedmetadata.scheduleevents.baseurl",
        "platform.enhancedmetadata.search.baseurl",
        "platform.enhancedmetadata.serviceresolve.baseurl",
        "platform.enhancedmetadata.applicationresolve.baseurl",
        "platform.enhancedmetadata.suggestions.baseurl",
        "platform.enhancedmetadata.summaries.baseurl",
        "platform.enhancedmetadata.bootstrap.baseurl"
    };
    endpointLSRKey(lsrKeysInit, lsrKeysInit+14);
}

次に、取得します

error: no match for call to '(std::__debug::vector<std::basic_string<char> >)
(const char* [14], const char**)'

誰でもこれについて何か考えがありますか?ありがとう

4

2 に答える 2

2

これは初期化vector::assign()ではありません:代わりに使用してください:

endPointLSRKey.assign(lsrKeysInit, lsrKeysInit+14);

lsrKeysInitをハードコーディングする代わりにの要素数を計算します14(要素が から削除または追加された場合は更新が必要になりますlsrKeysInit)。

endPointLSRKey
    .assign(lsrKeysInit, 
            lsrKeysInit + (sizeof(lsrKeysInit)/sizeof(lsrKeysInit[0])));

C++11 がサポートされている場合は、std::begin()andを使用できstd::end()ます。

endPointLSRKey.assign(std::begin(lsrKeysInit), std::end(lsrKeysInit));
于 2013-01-11T10:50:27.987 に答える
0

variable(arguments...)フォームはイニシャライザ (つまり、宣言) でのみ使用できます。既に存在する変数に代入する場合は、代入を使用するか、この場合は次を使用しますassign:

endpointLSRKey.assign(lsrKeysInit, lsrKeysInit+14);
于 2013-01-11T10:51:44.277 に答える