2017-06-26 9 views
0

私はこの構造体エラーが

vector<valindex> vals() // this works fine 
vector<valindex> vals(20) // throws the error mentioned below when the size is specified 

required from 'static _ForwardIterator std::__uninitialized_default_n_1<_TrivialValueType>::__uninit_default_n(_ForwardIterator, _Size) [with _ForwardIterator = valindex*; _Size = long unsigned int; bool _TrivialValueType = false]'のベクトルを初期化しようと、エラーを取得しています構造体を持っています

誰かがこのエラーの原因を説明して解決策を提示できますか?

ありがとうございます!

+3

エラーの一部が失われていますが、もっと重要なことに、最初のバージョンは「動作します」という理由だけで動作しません。ほとんどのVexing Parseを参照してください。問題は、あなたの型はデフォルトのコンストラクタを持っていませんし、その型の20個のデフォルトオブジェクトを作成しようとしていることです。 – Borgleader

+0

ありがとうございます。私はデフォルトのコンストラクタを追加することができず、エラーメッセージからそれを理解できませんでした。 –

答えて

3
vector<valindex> vals(); 

それは引数を取らず、vector<valindex>を返すvalsという名前の関数を宣言しているため動作します。 https://en.wikipedia.org/wiki/Most_vexing_parseを参照してください。それはvalindexvectorを構築しようと、そのようなオブジェクトを作成するための要件の一つはvalindexdefault-constructibleことがあるので

vector<valindex> vals(20); 

は動作しません。 valindexはデフォルトで構成可能ではないので、その行はコンパイルできません。

0

のstd ::ベクトルは、他の人のコンストラクタがあります

のstd ::ベクトルヴァルス(999、{11、55});

valsにはvalindex(11,55)が999コピー保存されます。ようこそ、C++ 11へ!

+0

こんにちは、サイトにようこそ。回答のコードを書式設定する方法については、この[markdown tutorial](https://stackoverflow.com/editing-help)をお読みください。 – jspurim

+0

また、OPは解決方法と同様にエラーの説明を求めていることを覚えておいてください。 – jspurim