共通言語ランタイムサポート:Common Language Runtime Support (/clr)
グラフィックに関するあるDLLを参照して、そのDLL内で定義されているクラス(AA::BB::CCとします)を生成しようとしています。
これがコンパイルエラーでうまくいかず、原因も対処もよくわからないため困っています。
C++の経験が乏しいため初歩的な問題かもしれませんが、アドバイスを頂きたいです。
もともとは、当該のDLLを使ってVB .netで実装されていたアプリを、今回VC++に移行しようとしているものです。
(当該のDLLは秘密保持のため、申し訳ありませんが具体的にはお伝えすることができません。)
まず移行元のVB .netの実装ソースは下記の通りになっており、問題無く動作しています。
Private Sub fff(ByVal g As Graphics)
・・・
Dim foo As AA.BB.II = Nothing
foo = New AA::BB::CC(g)
・・・
End Sub
※クラスAA::BB::CCのコンストラクタはSystem::Drawing::Graphicsを引数としています。
上記のVB .netのコードをVC++に移行したく、以下のように記述してみたのですが、これがコンパイルエラーとなってしまい困っています。
System::Windows::Forms::PictureBox^ pic;
・・・
Graphics^ g = pic->CreateGraphics(); //実際はオリジナルコードと同じくgは引数取得します
AA::BB::II^ foo = gcnew AA::BB::CC(g);
⇒ エラー C2365 'AA:BB::CC::0': 再定義; 以前の定義は 'プロパティ' でした。
上記のクラス生成・参照変数への代入の場面でこのエラーとなる意味がどうしても分からず、対処できずにいます。
(エラーメッセージ中、「::0」の部分が何を表しているかも不明です)
なお、関係ないかもしれませんが、3行目でfooへの代入を行わず
AA::BB::CC(^g); // gcnew宣言がないので「^」が必要?
とだけした場合にはコンパイルは通ります。
(インスタンスとして参照変数に代入できない以上 後続で使えず無意味ですが)
また、コンストラクタ引数の渡し方の問題かなと思い、値渡しを試みる意味で下記を
試してみましたがやはり同様のエラー(C2365)となりました。
上記について何かお分かりの方がいらっしゃいましたら、是非ヒント、アドバイスお願いいたします。