私はVS2010を使用しており、MVCアプリケーションを設計しています。
ソリューションに「プロジェクト1」と「プロジェクト2」があるとします。この順序でコンパイルする必要があります。P1はDLLにコンパイルされ、P2はDLLを動的に使用するExeファイルにコンパイルされます。P2はビューインターフェイスを宣言します。どちらのプロジェクトにも、インターフェイスを実装するビュークラス(純粋仮想メソッドを持つクラス)があります。
ここでの問題は、リンカがこの外部シンボルを解決できないと言うため、インターフェイスのヘッダーファイルをP1にインクルードできないことです。もちろん、これは正しいです。後でP2でコンパイルされるからです。
つまり、P2のインクルードフォルダーをP1に追加し、ヘッダーファイルの代わりにinterface.cppをP1にインクルードしました。
それは動作しますが、私はこれが私がすることになっていることではないと思います。それともそうではありませんか?インターフェイスは明らかに2回コンパイルされ、各プロジェクトに1回ずつコンパイルされます。
インターフェイスをP1に移動したくないので、問題を解決できます。ただ仮定してください、私はそれを望んでいません。
ご入力いただきありがとうございます。
編集:コードスニペット:
Project1:
View1.hpp // nothing special
View1.cpp:
#include ViewInterface.cpp
View1::View1(int x) : ViewInterface(int x)
Project2:
ViewInterface.hpp:
#ifdef EXP
#define DECLDIR __declspec(dllexport)
#else
#define DECLDIR __declspec(dllimport)
#endif
class ViewInterface : SomeOtherClass, AnotherClass
{
virtual void DECLDIR show(void) const = 0;
virtual void DECLDIR hide(void) const = 0;
}
ViewInterface.cpp:
ViewInterface::ViewInterface(int x) : SomeOtherClass(int x), AnotherClass(int x)
View2.hpp // nothing special
View2.cpp:
#define EXP
#include ViewInterface.h
View2::View2(int x) : ViewInterface(int x)