C#で構造体の配列を持った構造体を使いたいのですが
Cならば
struct xyz {
struct abc _abc[32];
int index;
};
struct abc {
int a;
int b;
int c;
};
struct xyz _xyz[8];
xyz[0]._abc[3].b = 1;
のような使い方で という感じで やっていた事を C#で 同じような事をやろうとしても うまくいきません
うまくやる方法をどなたかご存知ないでしょうか
Visual Studio 2005行った場合
コンパイルで
構文エラーです。不適切な配列の宣言子です。マネージ配列を宣言するには、次元指定子を変数の識別子の前に指定します。固定サイズ バッファ フィールドを宣言するには、フィールド型の前に fixed キーワードを使用します
となり
fixed をつけると
固定サイズ バッファの型は次のうちの 1 つでなければなりません: bool、byte、short、int、long、char、sbyte、ushort、uint、ulong、float または double
となってしまいます
No.3ベストアンサー
- 回答日時:
C# では、配列は「単なる連続したメモリ領域」ではなくて「添字によってオブジェクトを格納できるオブジェクト」であることに注意しなくてはいけません。
つまり、C では配列は一種の構造体でしたが、C# では配列は参照型のオブジェクトです。よって、C のように予めサイズを固定しておくということは基本的にできません。配列の大きさは配列のインスタンスが作られるときに動的に決まります。
C# では、参照型のオブジェクトを構造体のメンバにすることはあまりありません。null 値の扱いが面倒だからです。
また、C# では構造体の大きさは大きくとも 20 バイト程度までにします。C# では基本的に「構造体へのポインタ」はありません。巨大な構造体をそのまま扱うのはメモリの使い方の観点からいって非効率的です。
今回の件では、構造体ではなくクラスにするのがよいかと思われます。
この回答への補足
回答ありがとうございます
クラスを用いるようにした場合
クラスがクラスの配列を持つようにしたいわけですが
この場合もやはり 予めサイズを固定できず インスタンスを動的に生成するようにするわけですよね?
クラスにした方が良いのは回答の後半部の理由があるという事でよろしいのでしょうか?
重ねて質問申し訳ありません
No.4
- 回答日時:
> この場合もやはり 予めサイズを固定できず インスタンスを動的に生成するようにするわけですよね?
クラスにした方が良いのは回答の後半部の理由があるという事でよろしいのでしょうか?
はい、そういうことです
No.2
- 回答日時:
C#の勉強のつもりで書いてみましたが、あんまり美しくなかったり:
public struct Xyz {
public struct Abc { public int a, b, c; };
public int index; public Abc[] _abc;
};
class Program {
static void Main( string[] args ) {
Xyz[] _xyz = new Xyz[8];
for ( int i = 0; i < _xyz.Length; i++ ) { _xyz[i]._abc = new Xyz.Abc[32]; }
_xyz[0]._abc[3].b = 1;
}
}
C#の構造体は、クラスと違って値型なので、new[]した時点でインスタンス化されるけど、その際、引数なしのコンストラクタを構造体は定義できないので、結局、各要素ごとにインスタンス化しないといけないみたい。
いったん作成したものを捨てるのは忍びないので、代入にしてみてみたけど、中身が露呈しているのがなんとも。
No.1
- 回答日時:
構造体を宣言している順番はここに書いてある通りですか?
struct abcはstruct xyzより前で宣言しなければいけませんよ。
このエラーはstruct xyzのメンバーの型であるabcが見つからないと警告しているのではないですか?
この回答への補足
構造体を宣言している順番ですが実際は逆です
このコードは 質問を分かりやすくするために
いいかげん書いたコードで 最後に順序は入れ換えるのを忘れてました
申し訳ありません
今回の問題はそれとは無関係のようです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# プログラムが書けません。 4 2023/01/22 22:57
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
CloseとDisposeの違い
Visual Basic(VBA)
-
構造 他のクラスの構造体を別のクラスで使いたい。
C言語・C++・C#
-
C# インスタンスの破棄
その他(プログラミング・Web制作)
-
-
4
インスタンス参照でアクセスできない。代わりに型名?
C言語・C++・C#
-
5
C#において、同じインスタンスを何度もnewしてよいでしょうか。
その他(プログラミング・Web制作)
-
6
関数内の変数に<summary>コメントを付けたい
C言語・C++・C#
-
7
C#でstringをポインタとして渡す
C言語・C++・C#
-
8
画面を強制的に再描画させる方法
C言語・C++・C#
-
9
C#にて別クラスの関数を使いたい
C言語・C++・C#
-
10
C#の構造体の開放のしかた
C言語・C++・C#
-
11
構造体のデータを丸ごとコピーしたい
C言語・C++・C#
-
12
C# 配列の変数宣言について。
C言語・C++・C#
-
13
DataGrdViewに関連付けたデータの更新
C言語・C++・C#
-
14
C# Listを使わずに2次元配列の動的確保をしたいです。
C言語・C++・C#
-
15
GetPrivateProfileStringでiniファイル読込む処理を詳しく知りたいのですが・・・
C言語・C++・C#
-
16
構造体のメンバをfor文で回したい
C言語・C++・C#
-
17
C# DataGridView特定セルの入力フォーム変更について
C言語・C++・C#
-
18
visual studio でインデントを自動的に揃えるショートカットキー
その他(プログラミング・Web制作)
-
19
C#テキストボックスの文字を配列にいれてその後表示する
C言語・C++・C#
-
20
CStringからchar*への型変換について教えてください。
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
10人分の生徒の英語の点数{32,3...
-
C言語 ファイルの指定された行...
-
int i, int i[1];
-
c言語
-
C言語において、 配列要素をひ...
-
構造体のextern方法
-
C言語の2次元配列 容量が大き...
-
C言語についてです 5人のテスト...
-
Cのエラー
-
C#で配列が空かを判定するには?
-
fclose()でセグメンテーション違反
-
bmpやImageの配列を関数の引数...
-
2番目の最大値を求める
-
C#でのフィボナッチ数列
-
MFCのCArrayを使った二次元配列
-
C言語 数値の連続入力について
-
C言語で重複組合せを全列挙
-
C言語から質問です。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
define で 配列
-
c言語
-
C#で構造体の配列を持った構造...
-
構造体のextern方法
-
C言語において、 配列要素をひ...
-
C#でのフィボナッチ数列
-
C言語の2次元配列 容量が大き...
-
C#で配列が空かを判定するには?
-
配列のアドレス部
-
char型配列をint型に代入するには
-
C言語の課題が出たのですが自力...
-
2番目の最大値を求める
-
C言語についてです 5人のテスト...
-
C言語 ファイルの指定された行...
-
C言語から質問です。
-
c言語 構造体
-
コンボボックスでデフォルト値...
-
MFCのCArrayを使った二次元配列
おすすめ情報