Неявное преобразование не работает

0

Я пытаюсь сделать неявное преобразование и работает только с одним аргументом, например, если я оставлю только unsigned int он работает, иначе это не так. Что происходит?

#include <iostream>

class Foo
{
public:
    Foo(unsigned int, const std::string&) {}
};

class Bar
{
public:
    void insertFoo(const Foo& foo)
    {

    }
};

int main(int argc, char ** argv)
{
    Bar bar;
    bar.insertFoo(100, std::string(""));

    return 0;
}
  • 2
    Если вы хотите скопировать-list-initialize foo , то вам нужен braced-init-list, bar.insertFoo( { 100, std::string("") } );
  • 0
    О, черт возьми, так глупо. Спасибо @PiotrS.
Теги:

1 ответ

1
Лучший ответ

insertFoo() принимает один аргумент, но вы передаете ему два. Вы можете инициализировать из скопированного списка инициализаторов следующим образом:

bar.insertFoo( {100, std::string("")} );

Это создаст временное Foo с аргументами 100 и std::string("")

Вы также можете сделать это с помощью std::string:

bar.insertFoo( {100, {}} );

Ещё вопросы

Сообщество Overcoder
Наверх
Меню