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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.36128 の関連記事表示

<< 0 >>
■36128  インデクサについて
□投稿者/ プリ太 -(2009/05/21(Thu) 15:26:25)

    分類:[C#] 

    プリ太です。

    環境WinXP+VS2005です。

    数値をまとめて管理するのにインデクサを使おうとしています。
    インデクサの宣言は
    public class cItemPos_Timing
    {
    int[] array;
    public cItemPos_Timing(int i)
    {
    //配列の作成
    this.array = new int[i];
    }
    //インデクサ
    public int this[int i]
    {
    get
    {
    return this.array[i];
    }
    set
    {
    this.array[i] = value;
    }
    }
    }
    としています。
    このクラスの型の変数timingを他のクラスpStの中で宣言し、サイズを4で宣言しています。

    その後、変数timingに値を設定しようとして、
    pSt.timing[0] = 45;
    とすると、「エラー 431 型 'int' を型 'cItemPos_Timing' に暗黙的に変換できません。」
    とエラーメッセージが表示されます。
    配列はint型で宣言しているのでそのまま値を設定できると思ったのですが、違うのでしょうか?

    また、同じように2次元配列のインデクサも作成してみたのですが、同じように値を設定しようとするとエラーが出ます。
    インデクサに値を設定する時はそのままではダメなのでしょうか?

    宜しくお願いします。
親記事 /過去ログ62より / 関連記事表示
削除チェック/

■36129  Re[1]: インデクサについて
□投稿者/ みきぬ -(2009/05/21(Thu) 15:35:57)
    No36128 (プリ太 さん) に返信
    > このクラスの型の変数timingを他のクラスpStの中で宣言し、サイズを4で宣言しています。
    >
    この宣言をどうやってるか書いてほしかった。たぶん、↓こんな風に書いたんだと思う。

    cItemPos_Timing[] timing = new cItemPos_Timing[4];

    これだと、timing は cItemPos_Timing の配列として宣言されてるので記載のエラーが出たというわけ。
    ↓こう直せばいいんじゃないかな。

    cItemPos_Timing timing = new cItemPos_Timing(4);

記事No.36128 のレス /過去ログ62より / 関連記事表示
削除チェック/

■36130  Re[2]: インデクサについて
□投稿者/ プリ太 -(2009/05/21(Thu) 15:50:42)
    みきぬ さん、ありがとうございます。


    >>このクラスの型の変数timingを他のクラスpStの中で宣言し、サイズを4で宣言しています。
    >>
    > この宣言をどうやってるか書いてほしかった。たぶん、↓こんな風に書いたんだと思う。
    >
    > cItemPos_Timing[] timing = new cItemPos_Timing[4];
    >
    > これだと、timing は cItemPos_Timing の配列として宣言されてるので記載のエラーが出たというわけ。
    > ↓こう直せばいいんじゃないかな。
    >
    > cItemPos_Timing timing = new cItemPos_Timing(4);

    timingはcItemPos_St型クラスで宣言していて、
    public cItemPos_Timing[] timing;
    でと記述しています。
    サイズの指定はcItemPos_Stクラスを宣言した、cItemPos_Allクラスのコンストラクタ中で以下のように記述しています。。
    pSt.timing = new cItemPos_Timing[4];

    これだと、みきぬさんの書かれたコードと同じことになると思うのですが、違うのでしょうか?
    ちなみに、cItemPos_Stは格納する変数のみを格納したクラスです。
    cItemPos_Allクラスの中では値格納用のクラスを変数宣言して、値を設定しています。
記事No.36128 のレス /過去ログ62より / 関連記事表示
削除チェック/

■36131  Re[3]: インデクサについて
□投稿者/ Hongliang -(2009/05/21(Thu) 16:20:18)
    > timingはcItemPos_St型クラスで宣言していて、
    > public cItemPos_Timing[] timing;
    cItemPos_Timing の配列を宣言していますね。
    > pSt.timing = new cItemPos_Timing[4];
    でまあ当然ですが cItemPos_Timing の配列として timing を初期化しています。
    // みきぬさんの前者の方のコードですね。
    「cItemPos_Timing の配列」の、それぞれの要素の型は当然 cItemPos_Timing ですよね。
    だから pSt.timing[n] に代入するのは cItemPos_Timing となります。

    cItemPos_Timing 自体は一つしかいらなくて、cItemPos_Timing が管理する int の配列がほしいんでしたら、cItemPos_Timing[] じゃなくて cItemPos_Timing を宣言して初期化しないといけませんよね?
記事No.36128 のレス /過去ログ62より / 関連記事表示
削除チェック/

■36132  Re[4]: インデクサについて
□投稿者/ プリ太 -(2009/05/21(Thu) 16:30:08)
    Hongliang さん、ありがとうございます。


    >>timingはcItemPos_St型クラスで宣言していて、
    >> public cItemPos_Timing[] timing;
    > cItemPos_Timing の配列を宣言していますね。
    >> pSt.timing = new cItemPos_Timing[4];
    > でまあ当然ですが cItemPos_Timing の配列として timing を初期化しています。
    > // みきぬさんの前者の方のコードですね。
    > 「cItemPos_Timing の配列」の、それぞれの要素の型は当然 cItemPos_Timing ですよね。
    > だから pSt.timing[n] に代入するのは cItemPos_Timing となります。
    >
    > cItemPos_Timing 自体は一つしかいらなくて、cItemPos_Timing が管理する int の配列がほしいんでしたら、cItemPos_Timing[] じゃなくて cItemPos_Timing を宣言して初期化しないといけませんよね?

    宣言部分を以下に変更したところ、値の設定ができるようになりました。
    cItemPos_St型クラスの宣言:public cItemPos_Timing timing;
    cItemPos_Stクラスのサイズ指定:pSt.timing = new cItemPos_Timing(4);

    配列に値を入れるので、元々の宣言を配列型にしていたため、値がそのままではないらなかったということが解りました。
    また、初期化なので"[]"ではなく"()"でした。
    二重で間違えていました。

    実行したところ、値を設定することができました。
    ありがとうございました。
記事No.36128 のレス /過去ログ62より / 関連記事表示
削除チェック/

■36133  Re[5]: インデクサについて
□投稿者/ プリ太 -(2009/05/21(Thu) 16:30:42)
    すみません。解決にチェックするのを忘れていました。

    ありがとうございました。
記事No.36128 のレス / END /過去ログ62より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -