2011-12-21 7 views
2

私はベクトルで新しいです。私はベクトルにオブジェクトを追加しようとしています。しかし、私はコードに問題があるので、プログラムはコンパイルできません。しかし、私はそれが何であるか分からない。エラーは、次のとおりベクトルにオブジェクトを追加するときのC++のエラー

error C2664: 'void std::vector<_Ty>::push_back(_Ty &&)' : cannot convert parameter 1 from 'Line (void)' to 'Line &&' 

コードは次のとおり

Line help_line(); 
cin >> ln_quan; 
vector <Line> figure_line; 
for (int i = 0 ; i < ln_quan ; i++) 
{ 
    figure_line.push_back(help_line); 
} 

コンパイラエラーが6番目のラインであることを述べている(figure_line.push_back(help_line))。

私はオブジェクトを追加する方法を説明するチュートリアルを探しています(私はこのようなことをするときに簡単に...)。

「ライン(無効)」と「ライン& &」はどういう意味ですか? 'Line(void)'はクラス 'Line'ですか?もしそうなら、この場合、「(void)」とはどういう意味ですか?

答えて

3
Line help_line(); 

このを意味するものではありませんデフォルトのコンストラクタでreated。 "これは、 "help_lineは、他のどこかで実装され、引数をとらずにLineインスタンスを返す関数でなければならない"という意味です。

欲しいものは括弧を付けずにLine help_line;と綴られています。

ので、次のエラーメッセージが表示されます:

'void std::vector<_Ty>::push_back(_Ty &&)' : cannot convert parameter 1 from 'Line (void)' to 'Line &&' 

Line &&push_backが期待されるパラメータの一種です。 &&はここで実際には問題になりません。それは初心者のための一種の呼び出し規約として考えられています。 Lineのベクトルで収集するものなので、まだLineを渡しているだけです。

Line(void)は、引数をとらずにインスタンスを返す関数の型です。 (void)は、関数引数のために()と書くもう1つの方法です(新しいコードでは推奨されませんが、非常に古いCコードと対話するときに必要になることがあります)。

6
Line help_line(); 

これは、関数ではなく、Lineを宣言します。代わりにLine help_line;を使用してください。

は参照してください:あなたは、関数がパラメータを取らないとLineを返すようhelp_lineを宣言したMost vexing parse: why doesn't A a(()); work?

+0

@OliCharlesworth:私はしました:-) –

+1

これは、通常「最も厄介な解析」と考えられているものよりも単純なケースです。 –

+0

@Karl:変数宣言が "厄介な解析"と呼ばれる関数宣言として解釈されるすべてのインスタンスではありませんか? –

4

。それはあなたが意図したものですか?そう、あなたはこのように、機能を呼び出すために必要がある場合は

Line help_line; 
... 
figure_line.push_back(help_line); 

Line help_line(); 
... 
figure_line.push_back(help_line()); 

ない場合は、あなたがタイプLineのオブジェクトとしてhelp_lineを宣言することを意図し、あなたはこの必要help_lineLine Cのインスタンスでなければならない」

関連する問題