別のプロジェクトの基底クラス

[戻る]
紅' 2009/04/28(火) 16:38:36
こんにちわ。紅'と申します。
VisualStudio2008 の C++/CLI を使用しています。

この環境下で、あるプロジェクトに存在するクラスを
別のプロジェクトで作成するクラスの基底クラスとして
利用したいと考えています。

たとえば以下のような構成となります。
(project A/B は DLL を作成するためのプロジェクトとして作成しています)

project A
  ClassA

project B
  ClassB : ClassA

実際にやってみると、project B のプロパティで Framework と参照のページの
参照設定を project A に対して行わないとリンクで ClassA が見つからなくて
エラーとなり、参照設定を行うと以下のようなエラーが出てしまいます。

>error C2011: 'ClassA' : 'class' 型の再定義

実際の構成では上記のプロジェクトのほかに実行ファイルを作成するための
プロジェクトもあることから、このプロジェクトとのリンク時に重複してしまい
エラーとなるのかとも思い、実行ファイルのプロジェクトの project A への
参照をはずしてみたのですが、結果は同じでした。

試しに ClassA を project B にコピーしてコンパイルすると成功します。
もちろん ClassB 側では #include もちゃんと通しています。

そもそもこういったことは出来ないのでしょうか。
どこか勘違いをしているような気もします。

ご教示をいただければと思います。
よろしくお願いいたします。

以上です。

subaru 2009/05/01(金) 13:14:33
>実際にやってみると、project B のプロパティで Framework と参照のページの
>参照設定を project A に対して行わないとリンクで ClassA が見つからなくて
>エラーとなり、参照設定を行うと以下のようなエラーが出てしまいます。
>
>>error C2011: 'ClassA' : 'class' 型の再定義

project Bからproject Aのヘッダーファイルを#includeしているからではないでしょうか。
アセンブリのdllを参照する場合はそのプロジェクトのヘッダーファイルは#includeする
必要はないようです。
(参照するdllはヘッダーファイルのないC#やVB.NETで作成されたものでもかまわないわ
けですし)

ということで、project Aの参照のみにしてみてはどうでしょうか。

紅' 2009/05/01(金) 14:54:34
[[解決]]
subaru さん、ご返信をありがとうございます。

ご指摘の通りでした。お恥ずかしい。。。

あの悩んだ時間を返せって気持ちですが、w
仰られるとおり、C# などで作成したファイルも参照できるのですものね。
C++/CLI に乗り換えているところなので、こんなレベルのところにばかり
つまずいています。

なんにしても解決が出来て助かりました。
感謝いたします。

以上です。

古いスレッドには追加発言できません。