VC.NETでSystem.Stringクラスを使用するとエラーになるのは?

解決


ぷにすけ  2007-07-25 00:18:23  No: 65825

VC.NET 初心者です。

VC.NETでStringクラスを定義して、ビルドを行ったところ、コンパイルエラーとなります。
VB.NETでは定義するだけで使用できますが、VC.NETではなにか必要なのでしょうか。

エラーの意味がわからないため、どうしたらよいかわかりません。
助けてください。

VC.NET2005でWindowsフォームアプリケーションをテンプレートにプロジェクトを作成しました。
名前空間の追加はしておりません。

以下、実際のコードです。
### ここから ###
private: System::Void textBox1_TextChanged(System::Object^  sender, System::EventArgs^  e)
{
    DateTime dt;
    dt = DateTime::Now;
    System::String strValue;
    strValue = dt.Year.ToString();
}
### ここまで ###

ビルドしたところ、以下のエラーがでます。
### ここから ###
error C3149: 'System::String' : トップレベルの '^' なしに、この型をここに使用することはできません
### ここまで ###

以上です。よろしくお願いいたします。


Blue  2007-07-25 00:30:44  No: 65826

VB.NETとは言語仕様が違います。

System::Stringクラスは参照型のクラス(refクラス)ですので、
型の後に ^ が必要です。

System::String^ strValue;

一方DateTimeは値型クラス(valueクラス)なので^は必要ないです。
ここら辺は基本的なことなので、C++/CLIの入門書を読まれたほうが理解が進むと思います。

一応MSDN
CLR 参照クラスのオブジェクトの宣言
http://msdn2.microsoft.com/ja-jp/library/ms235261(VS.80).aspx


ぷにすけ  2007-07-25 00:51:09  No: 65827

ありがとうございました。
VB.NETは言語仕様が違うのですね。

勉強します。


Blue  2007-07-25 01:26:57  No: 65828

訂正です。
>System::Stringクラスは参照型のクラス(refクラス)ですので、
>型の後に ^ が必要です。
は間違っていました。

参照型だから^を付けないといけないということはなくて、
用途によって、参照型でも^を付けないで宣言することもあります。
(Formとか)

ただ、System::Stringの場合は^を付けた宣言しか出来ないようです。
(理由はよくわかりません。というか結構話題になっているようだけど
まともに読んでいないだけなんですけどね。)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加