如何解决错误说" XXX没有匹配的函数调用"?

时间:2014-10-01 23:44:36

标签: c++ templates

为什么我得到"没有匹配的功能来呼叫' getVector'"关于赋值行语句的错误?

template <typename T>
vector<T> getVector(int);

int main() {
    auto myVector = getVector(5);
    ...
}

template <typename T>
vector<T> getVector(int size) {
    ...
}

2 个答案:

答案 0 :(得分:3)

看看你的编译器说的是什么!它试图帮助你。

  

main.cpp:7:21:错误:没有匹配函数来调用'getVector'

然后:

  

main.cpp:4:16:注意:候选模板被忽略:无法推断模板参数'T' std::vector<T> getVector(int);

错误非常明确:编译器会看到您的getVector函数,但您从未提及替换T的“具体”类型:编译器不知道您希望向量保持什么,所以它只是忽略了那个功能模板。

您想要在矢量中存储什么样的值?例如整数?然后:

auto myVector = getVector<int>(5);
                          ^ give a type here

答案 1 :(得分:0)

您将getVector()定义为采用模板参数T的函数模板。需要以某种方式提供该模板参数。如果没有T被推断或明确提供,您就无法调用该函数。

例如,如果您要返回的向量包含整数,则可以为int提供T,如下所示:

auto myVector = getVector<int>(5);