VC++でクラスの生成ができません(エラーC2365:再定義)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
xiaozhu_c1

VC++でクラスの生成ができません(エラーC2365:再定義)

#1

投稿記事 by xiaozhu_c1 » 8年前

環境:Visual C++ (Visual Studio2015);
共通言語ランタイムサポート: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は、インターフェイスクラスAA::BB::IIの派生クラスです。
※クラス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': 再定義; 以前の定義は 'プロパティ' でした。
C2365の意味を確認し、概して名前のかぶる変数や関数を定義しようとした時のエラーであることは理解できるのですが、
上記のクラス生成・参照変数への代入の場面でこのエラーとなる意味がどうしても分からず、対処できずにいます。
(エラーメッセージ中、「::0」の部分が何を表しているかも不明です)

なお、関係ないかもしれませんが、3行目でfooへの代入を行わず
AA::BB::CC(^g); // gcnew宣言がないので「^」が必要?
とだけした場合にはコンパイルは通ります。
(インスタンスとして参照変数に代入できない以上 後続で使えず無意味ですが)

また、コンストラクタ引数の渡し方の問題かなと思い、値渡しを試みる意味で下記を
試してみましたがやはり同様のエラー(C2365)となりました。

コード:

  Graphics ^%g = pic->CreateGraphics();
  AA::BB::II^ foo = gcnew AA::BB::CC(g);

  ⇒ エラー C2365 'AA:BB::CC::0': 再定義; 以前の定義は 'プロパティ' でした。
上記について何かお分かりの方がいらっしゃいましたら、是非ヒント、アドバイスお願いいたします。

質問者

Re: VC++でクラスの生成ができません(エラーC2365:再定義)

#2

投稿記事 by 質問者 » 8年前

質問者です。 念のため、このプロジェクトの構成について追記いたします。

このプロジェクトは画面アプリとして作っています。
当該のDLLは参照設定から取り込んでいます。

プロジェクト内のソースの構成としては
 ・画面フォームのヘッダファイル1本の中(namespace内)にロジックを全て記述
 ・cppからはフォームの gcnew とその ShowDialog()呼出 のみを行なう
という構成で、画面フォーム ヘッダファイルの namespace宣言より前の部分では、以下の宣言2行のみです。
 #pragma once
 #include "Windows.h"

返信

“C言語何でも質問掲示板” へ戻る