C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: std::vectorの扱い


(過去ログ 56 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■31542 / inTopicNo.1)  std::vectorの扱い
  
□投稿者/ ふくちゃん (18回)-(2009/01/23(Fri) 14:19:03)

分類:[C/C++] 

いつも拝見しています。

以下のように、ダイアログをvector配列でもち、
クリアのメソッドを呼ぶと、コンパイルエラーになります。
vectorをあきらめてポインタでNEWしてあげれば目的は達成できるのですが、
理由がわからずすっきりしません。
どなたか教えてください。

std::vector<CDialog> aaa;
aaa.clear();

error C2582: 'operator '<Unknown>' 関数は '<Unknown>' 内では使用できません。
コンパイルされたクラスのテンプレートのインスタンス化 'class CDialog*__cdecl std::copy(class CDialog*,class CDialog*,class CDialog*)' の参照を確認してください

引用返信 編集キー/
■31545 / inTopicNo.2)  Re[1]: std::vectorの扱い
□投稿者/ アキラ (155回)-(2009/01/23(Fri) 14:27:41)
アキラ さんの Web サイト
No31542 (ふくちゃん さん) に返信

CDialogがコピー不可能なクラスだからではないかと思います。
vectorの型引数にする型はコピーコンストラクタを持つクラスでなければなりません。
引用返信 編集キー/
■31547 / inTopicNo.3)  Re[2]: std::vectorの扱い
□投稿者/ επιστημη (1574回)-(2009/01/23(Fri) 14:33:03)
επιστημη さんの Web サイト
おんなじことをVC++9(VS2008)で追試したところ、
エラー・メッセージがちゃいます。

CObject::operator= が private でアクセスできんとかなんとか。
CDialogがコピー不可なので vector の要素になれんのでしょう。


引用返信 編集キー/
■31549 / inTopicNo.4)  Re[1]: std::vectorの扱い
□投稿者/ アキラ (156回)-(2009/01/23(Fri) 14:36:14)
アキラ さんの Web サイト
No31542 (ふくちゃん さん) に返信

std::vector<std::tr1::shared_ptr<CDialog>> aaa;

にすれば、コピー不可能なクラスでもvectorの要素にできますよ。
引用返信 編集キー/
■31551 / inTopicNo.5)  Re[2]: std::vectorの扱い
□投稿者/ επιστημη (1575回)-(2009/01/23(Fri) 14:43:06)
επιστημη さんの Web サイト
> std::vector<std::tr1::shared_ptr<CDialog>> aaa;
> にすれば、コピー不可能なクラスでもvectorの要素にできますよ。

ポインタですからね♪
んだから「shared_ptrわかんなーい」なら
std::vector<CDialog*> とすればおっけぃです。
new/deleteをきちんと管理できるならね♪

引用返信 編集キー/
■31553 / inTopicNo.6)  Re[3]: std::vectorの扱い
□投稿者/ ふくちゃん (19回)-(2009/01/23(Fri) 15:07:30)
No31551 (επιστημη さん) に返信
>>std::vector<std::tr1::shared_ptr<CDialog>> aaa;
>>にすれば、コピー不可能なクラスでもvectorの要素にできますよ。
>
> ポインタですからね♪
> んだから「shared_ptrわかんなーい」なら
> std::vector<CDialog*> とすればおっけぃです。
> new/deleteをきちんと管理できるならね♪
>

了解いたしました。^^
コピー不可のクラスというものがあったんですね。
ありがとうございました。


解決済み
引用返信 編集キー/
■31556 / inTopicNo.7)  Re[4]: std::vectorの扱い
□投稿者/ アキラ (157回)-(2009/01/23(Fri) 15:39:26)
アキラ さんの Web サイト
No31553 (ふくちゃん さん) に返信

> コピー不可のクラスというものがあったんですね。

ちなみに、コピー不可のクラスは以下のようにして作ります。

class hoge {
private:
    // コピーコンストラクタとコピー代入演算子を宣言するけど定義しない
    hoge(const hoge&);
    hoge& operator=(const hoge&);
};

解決済み
引用返信 編集キー/
■31602 / inTopicNo.8)  Re[5]: std::vectorの扱い
□投稿者/ ふくちゃん (20回)-(2009/01/26(Mon) 09:21:05)
なるほど。
プライベートに = の演算子を入れてしまえば、
コピー付加のクラスが出来上がるのですね。
納得できました。

ありがとうございます。



No31556 (アキラ さん) に返信
> ■No31553 (ふくちゃん さん) に返信
>
>>コピー不可のクラスというものがあったんですね。
>
> ちなみに、コピー不可のクラスは以下のようにして作ります。
>
> class hoge {
> private:
> // コピーコンストラクタとコピー代入演算子を宣言するけど定義しない
> hoge(const hoge&);
> hoge& operator=(const hoge&);
> };
>
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -