アプリ版:「スタンプのみでお礼する」機能のリリースについて

VC++2005の.NETにてアプリを作成しています。言語はC++/CLIです。

data.hに下記のような定義をしています。

【data.h】
namespace A {
namespace B {

enum class Hoge
{
aaa,
bbb
};

}
}

これを、Form1.hからヘッダファイルをインクルードして使用したいのですが、
下記のように記述すると、ビルド実行は可能なのですが、デザイナが読み込めなくなってしまいます。

【Form1.h】
#include "data.h"

・・・

using namespace A::B;

・・・

int hoi = (int)Hoge::aaa;//これを記述すると、デザイナが読み込めなくなる

・・・

この現象について、何か私の使用方法が間違っているのでしょうか?
C++/CLI初心者のため、このようなことでつまづいてしまっています。
解決法をご存知の方おられましたら、ご教示お願い致します。

【デザイナのエラー内容】
デザイナの読み込み時に 1 つ以上のエラーが発生しました。エラーは以下に一覧表示されます。コードの変更が必要なエラーもありますが、プロジェクトを再度ビルドすると解決できるエラーもあります。

フィールド 'aaa' がターゲット オブジェクトで見つかりませんでした。フィールドがターゲット オブジェクトのインスタンス変数として定義され、また正しいスコープを含んでいることを確認してください。

A 回答 (2件)

ちょっと気になるのは


enum class Hoge { ... };

struct Hoge {
enum { ... };
};
としたらどうなるのかなぁというところ.

この回答への補足

御回答ありがとうございます。
試してみましたが、同様エラーが起きました。

色々自分で試した結果、
InitializeComponent()内で、
   int hoi = (int)Hoge::aaa;
のように、enum値を「代入」すると、現象が起こるようです。
※下記のような場合だと起こりませんでした。

void InitializeComponent(void){
・・・
hoge();
}
void hoge(){
int hoi = (int)Hoge::aaa;
}

なぜこのような現象が起こるのでしょうか?
もしよろしければ、ご教示頂けませんでしょうか。

補足日時:2009/12/02 15:34
    • good
    • 0
この回答へのお礼

よく分かりませんが、さらに試した結果、
InitializeComponent()の下の方の、
#pragma endregion
の場所が初期状態と変わっていたのが原因のようです。
そもそも関数のコメントに、
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
と書いてあったので、自分で関数内を編集しなければ、
このような問題は起こらなかったと思うので、
今後はこの箇所をさわらないようにします。
ありがとうございました。

お礼日時:2009/12/02 16:57

「Windows フォーム アプリケーション」プロジェクトを新規で作ってやってみましたが、こちらは問題なく表示されてますね。



一度新しいプロジェクトを作成しなおして、コードを移植してみてはどうでしょうか?

この回答への補足

御回答ありがとうございます。
試しに私も新規作成でやってみましたが、
同様にデザイナが表示されなくなるエラーが出ました。
※ビルド実行は可能です。

何か列挙体の使用方法に問題があるのでしょうか。。
もし他の解決策をご存知でしたら、ご教示お願いできませんでしょうか?

補足日時:2009/12/02 14:07
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!