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 回答