首页 > 解决方案 > 重载字符向量和字符串c ++时,对成员函数的调用不明确

问题描述

我想通过以下方式重载一个函数:

void f(string s){
    cout << "String case" << endl;
}

void f(vector<char> v){
    cout << "Vector case" << endl;
}

对于我插入字符串对象或向量对象的情况,一切都很好:

int main()
{
    string s = "hello";
    f(s); // Prints "String case"
    vector<char> v = {'a', 'b'};
    f(v); // Prints "Vector case"
    return 0;
}

但是如果我想运行f({'a', 'b'});,由于数组可以自动转换为字符串和向量,我得到error: call of overloaded ‘f()’ is ambiguous. 假设我想把这种情况当作一个向量,我怎么能告诉编译器呢?

标签: c++type-conversionoverloading

解决方案


明确说明大括号用于初始化的类型:

f(string{'a', 'b'});
f(vector<char>{'a', 'b'});

推荐阅读