ArrayList

[戻る]
美晴 2005/07/15(金) 14:39:59
お世話になります。
ArrayListクラスを利用しようと思っているんですが
fatal error C1190: マネージ対象コードには '#using <mscorlib.dll>' と '/clr' が必要
です。
というエラーが出てしまいます。
私なりに調べてみると「プロジェクトのプロパティで拡張マネージを変更するといい」とあった
ので
早速試してみたんですが、無事DLLも読み込んで名前空間も確保出来たのですが、
肝心のArrayListクラスが使えませんでした。

ArrayList* partsList;//宣言

Blue 2005/07/15(金) 14:43:16
VCのバージョンは?プロジェクトはナニ?
書いたソースを載せてください。

美晴 2005/07/15(金) 14:44:22
すみません間違って途中で投稿してしまいました。

ArrayList* partsList; と宣言すると
error C3265: アンマネージ '<不明>' で、マネージ '<不明>' を宣言できません。
というエラーが出てしまいます。
プロジェクトのプロパティの マネージ拡張を「いいえ」から「はい」に変更したのですが
この方法が間違っているのでしょうか?

どうかご指導宜しくお願いします。

美晴 2005/07/15(金) 14:48:10
Win2000下で 2003.NET ダイアログベースです。

class ListTest{
protected:
    /**部品リスト*/
    ArrayList* partsList;
//ここから処理記述予定
}

宣言で行き詰まっているのでソースといってもこんなものしかないです、すみません;

Blue 2005/07/15(金) 14:51:47
ダイアログベースということは
MFCですか?MFCの一部にMC++の機能を入れれるのかなぁ。。。

MFCなら、CArrayとかCListではダメなんでしょうか?
(std::vectorやstd::listでも可能)

美晴 2005/07/15(金) 14:58:56
文字列や数値の集まりのオブジェクトをリストに追加していきたいのですが可能でしょうか?
std::list、CListも見てみたのですが1つの変数しか入らない配列のようなものかなと思って
スルーしてました;

επιστημη 2005/07/15(金) 15:00:32
「managed-classを含むclassはmanagedでなくちゃあかん」
と言うてるのでしょう。

↓コレがmanagedのシルシ
__gc class ListTest{
protected:
  System::Collections::ArrayList* partsList;
};

επιστημη 2005/07/15(金) 15:01:55
> 文字列や数値の集まりのオブジェクトをリストに追加していきたいのですが可能でしょうか?

もちろんですとも。

class なにか { ... };

std::list<なにか> なにかの集まり;

Blue 2005/07/15(金) 15:04:24
> 「managed-classを含むclassはmanagedでなくちゃあかん」
ということは、MFCダイアログベースのものをすべて
Windowsフォームアプリケーションに書き換えるのか。。。

数値も文字列として登録すればどうでしょうか?
それかバリアント型(みたいなもの)をつかうとか。

CArray< _variant_t, _variant_t > partsList;

とか。

また、リストを複数作って、

CArray< int, int > partsIntList;
CStringArray       partsStrList;

で管理クラスで切り分けるインタフェースをつくる。

美晴 2005/07/15(金) 15:16:24
[[解決]]
>επιστημηさん
std::list<オブジェクトのあるクラス名> リスト名;
という感じでしょうか。

>Blueさん
変数の型を後で変更するということですよね。
まったく思いつきもしませんでした・・・

両方試して、プログラムに合うほうでやってみようと思います。
素早い対応ありがとうございました!

Blue 2005/07/15(金) 15:28:04
> 文字列や数値の集まりのオブジェクトをリストに追加
よく読み返したら
これってクラスのことですか?

ただし、CArrayなどを使うと、宣言時にある程度の配列をつくってしまいます。
リストとなるクラスにはデフォルトコンストラクタが必要になります。
(ポインタリストならば要らないけど)

古いスレッドには追加発言できません。