2014-12-06 41 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

如果你想複製列表初始化'foo',那麼你需要braced-init-list,'bar.insertFoo({100,std :: string(「」)});' – 2014-12-06 21:26:42

+0

哦,天哪,真傻。謝謝@PiotrS。 – yayuj 2014-12-06 21:27:48

回答

1

insertFoo()只接受一個參數,但是您傳遞了兩個參數。您可以從支撐初始化列表初始化是這樣的:

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

這將創建一個臨時Foo帶參數100std::string("")

您還可以使用std::string做到這一點:

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