掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.25753

vectorでクラスを作成する場合のコンストラクタへの引数の与え方
投稿者---DAI(2006/01/27 01:38:43)


御世話になります。
以下のようにして、vectorで10個のHumanクラスを作成し、
第二引数の2をHuman(int i);という
コンストラクタにあたえることは出来ています。
vector < Human > HuGr(10,2);

次にHuman(int i, int j);というコンストラクタに引数をあたえたいのですが、
以下のようにするとコンパイルエラーが発生します。
vector < Human > HuGr(10,2,5);

エラー内容は以下です。

no matching function for call to ‘std::vector<Human, std::allocator<Human> >::vector(int, int, int)’


vectorでクラスを作成する際に、複数の引数を持つコンストラクタを
呼び出すことはできないのでしょうか?


OSはFedora4、
コンパイラはGNU、コンパイルコマンドは[g++ ソース名]で行っています。

お手数をお掛け致しますが、ご教授お願いいたします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:vectorでクラスを作成する場合のコンストラクタへの引数の与え方 25754 YuO 2006/01/27 01:58:29


No.25754

Re:vectorでクラスを作成する場合のコンストラクタへの引数の与え方
投稿者---YuO(2006/01/27 01:58:29)


>以下のようにして、vectorで10個のHumanクラスを作成し、
>第二引数の2をHuman(int i);という
>コンストラクタにあたえることは出来ています。
>vector < Human > HuGr(10,2);

これは,
vector < Human > HuGr(10, Human(2));

とコンパイラが解釈しています。
引数一つのコンストラクタは型変換に使えるため,
2をHuman型へ変換するためにコンストラクタが起動されています。


>次にHuman(int i, int j);というコンストラクタに引数をあたえたいのですが、
>以下のようにするとコンパイルエラーが発生します。
>vector < Human > HuGr(10,2,5);

当然です。
引数二つのコンストラクタは型変換に使えません。従って,コンパイラが
vector < Human > HuGr(10, Human(2, 5));

と勝手に解釈してくれることはありえません。


>vectorでクラスを作成する際に、複数の引数を持つコンストラクタを
>呼び出すことはできないのでしょうか?

そもそも,vectorクラスを作成する際にその要素型のコンストラクタを呼び出すことはできません。
# デフォルトコンストラクタなら呼び出すことが出来ますが。

初期値を与えるには,明示的にコンストラクタを呼び出す必要があります。
つまり,先も書いたように
vector < Human > HuGr(10, Human(2, 5));

と書けば,HuGrをHuman(2, 5)をコピーすることで初期化してくれます。



この投稿にコメントする

削除パスワード

No.25756

vectorでクラスを作成する場合のコンストラクタへの引数の与え方
投稿者---DAI(2006/01/27 02:14:29)


YuO様、お答え頂きありがとうございます。

お教えいただきましたように、
vector < Human > HuGr(10,Human(2,5);
と行うことで、コンパイルを行い、正常に動作することを
確認することが出来ました。
ありがとうございました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧