2016-10-10 107 views
0

我很難理解如何在C++中使用<initializer_list>。讓我們舉一個簡單的例子:在C++中使用<initializer_list>

我有這樣的事情:

using namespace std; 

class TV{ 
    vector<string> channels; 
    public: 
    TV(initializer_list<string> channels){} 
} 

比方說,這是我的主:

int main(){ 
    TV x({"BBC", "CNN"}, y({"SKYNEWS", "FOX", "CNN"}); 
    return 0; 
} 

我怎樣才能創建一個沒有默認參數計數構造爲字符串?

+1

類似'TV(initializer_list channels_):channels(channels _){}'? –

+0

[參考](http://en.cppreference.com/w/cpp/utility/initializer_list)應該對您有所幫助。有很多你需要首先修復的拼寫錯誤。 – NathanOliver

+2

「x」有不平衡的括號。 – Jarod42

回答

1

一個std::vector構造函數的直接花費std::initializer_list

vector(std::initializer_list<T> init, const Allocator& alloc = Allocator()); 

所以,你可以在你的構造函數

TV(std::initializer_list<std::string> _channels) 
: channels(_channels) 
{} 

你也應該避免在同一行聲明多個變量,只是初始化括號不匹配,會更明顯。

​​

Working demo

+0

謝謝,解釋。 – Miguel

0

你的代碼是工作的罰款。

當您聲明時,TV x({"BBC", "CNN"}), y({"SKYNEWS", "FOX", "CNN"});中有大括號錯位。調整並粘貼下面的代碼。有用。

#include <iostream> 
#include <vector> 

using namespace std; 

class TV{ 

vector<string> channels; 

public: 

TV(initializer_list<string> channels1){ 

    channels = channels1; 
} 

void printSize() 
{ 

    cout<<channels.size()<<endl; 
} 


}; 



int main(){ 

TV x({"BBC", "CNN"}), y({"SKYNEWS", "FOX", "CNN"}); 

x.printSize(); 
y.printSize(); 

return 0; 
} 

The output is 

2 
3