2014-12-06 4 views
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

Если вы хотите для copy-list-initialize 'foo', тогда вам нужен бит-init-list,' bar.insertFoo ({100, std :: string ("")}; ' –

+0

О, черт возьми, так глупо. Спасибо @PiotrS. – yayuj

ответ

1

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

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

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

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

bar.insertFoo({100, {}}); 
Смежные вопросы