2016-10-10 21 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のコンストラクタの一つは、直接また、あなたのように、単一の行に複数の変数を宣言することは避けてくださいだから、あなたは自分のコンストラクタで

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

を初期化することができますstd::initializer_list

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

を取りますカッコがミスマッチであったとすれば、それはより明らかになったであろう。

​​

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 
関連する問題