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

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

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

.NETでの構造体での文字列定義


(過去ログ 3 を表示中)

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

■2635 / inTopicNo.1)  .NETでの構造体での文字列定義
  
□投稿者/ 頭がポン 二等兵(1回)-(2006/02/23(Thu) 23:43:44)

分類:[.NET 全般] 


分類:[.NET 全般] 

はじめまして。
最近、Visual C++ 2005 Express Editionを手に入れまして、.NET環境でのプログラミングに挑戦しています。
もともとは、C++ Builder環境で趣味のソフトを作成していました。

たぶん基本的なことだと思うのですが、MSDNとかを見てもわからなかったのでお尋ねします。

やりたいことは、不定長の文字列を含んだ構造体をどうやって実現するのか、ということです。

Cの場合ですと、
typedef struct{
int x;
int y;
char name[128];
} HOGE;
のように、最大でも128文字あれば十分だろう、というような書き方をしていました。
C++ Builder の場合、AnsiStringというものがありまして
typedef struct{
int x;
int y;
AnsiString name;
} HOGE;
のように書いておけば、文字列が何文字でも扱えました。

これが、VC++ .NETの場合は、文字列が String^ name のように書けば、不定長の文字列が扱えたので、
typedef struct{
int x;
int y;
String^ name;
} HOGE;
と書いたところ、
=========================================================================
.\MainForm.cpp(207) : error C3265: マネージ 'name' をアンマネージ '$UnnamedClass$0x157af13f$2$' で宣言できません。
グローバル変数、静的変数、または gc ヒープのオブジェクトを参照しているネイティブ型のメンバを宣言することはできません
=========================================================================
というようなエラーが出てしまいます。

C++の.NETでは、普通は上のようなことをしたい場合、書き方の定石みたいなものがあれば、教えていただきたいのです。

よろしくお願いします。




0
引用返信 編集キー/
■2637 / inTopicNo.2)  Re[1]: .NETでの構造体での文字列定義
□投稿者/ Blue 二等兵(12回)-(2006/02/24(Fri) 01:25:38)

分類:[.NET 全般] 

アンマネージドの無名クラスでマネージドクラスの変数をメンバで持つことは出来ません。

public ref struct HOGE
{
int x;
int y;
System::String^ name;
};

それと、C言語とC++での struct の違いは理解できていますでしょうか?


0
引用返信 編集キー/
■2638 / inTopicNo.3)  Re[2]: .NETでの構造体での文字列定義
□投稿者/ 頭がポン 二等兵(2回)-(2006/02/24(Fri) 02:16:02)

分類:[.NET 全般] 

Blueさん、レスありがとうございます。

ばっちりです。おかげさまで、すっきりしました。
次に進むことができます。

CとC++のstructの違いというのは、正直わかりません。同じものだと思ってました。
typedef struct{
int x;
int y;
} HOGE;
HOGE xyz;
xyz.x=100; xyz.y=200;
のような使い方しかしていなかったです。




解決済み
引用返信 編集キー/
■2640 / inTopicNo.4)  Re[3]: .NETでの構造体での文字列定義
□投稿者/ 中博俊 神(344回)-(2006/02/24(Fri) 10:36:58)
中博俊 さんの Web サイト

分類:[.NET 全般] 

これって解決してるの?

ネイティブでいく場合
typedef struct{
int x;
int y;
std::string name; <=CStringでもOK
} HOGE;

マネージドにする場合
value struct HOGE
{
int x;
int y;
String^ name;
};


0
引用返信 編集キー/
■2643 / inTopicNo.5)  Re[4]: .NETでの構造体での文字列定義
□投稿者/ Blue 二等兵(13回)-(2006/02/24(Fri) 21:38:23)

分類:[.NET 全般] 

2006/02/24(Fri) 21:47:10 編集(投稿者)

value structでもOKでしたね。


POD-structならば、やはり
typedef struct tagHOGE{
int x;
int y;
char name[128];
} HOGE;
# 無名構造体はなるべく使わないほうが良いです。
か、
typedef struct tagHOGE
{
int x;
int y;
char* name;
} HOGE;
もしくは、可変長配列メンバを使うでしょう。
typedef struct tagHOGE
{
int x;
int y;
int length;
char name[ 1 ];
} HOGE;
みたいなヤツ。
参考)http://www1.kcn.ne.jp/~robe/cpphtml/html03/cpp03015.html


0
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -