2012-04-29 10 views
3

2つのプロジェクトで解決策があります。 最初のプロジェクトでは、Frameといくつかのコントロールが2番目のCForcesEditorDialog:CDialogにあります。 私はそれらを比較したいと思います。2つのプロジェクトのソリューションはコンパイルされません

MainFrame.obj:エラーLNK2019: しかし、このエラーは私がプロジェクトをコンパイル与えていない未解決の外部シンボルを "公共: __thiscall CForcesEditorDialog :: CForcesEditorDialog(クラスのCWnd *、クラスのメインフレーム*)"(?? 0CForcesEditorDialog @@ QAE @ PAVCWnd @@ PAVMainFrame @@@ Z)関数で参照 ? "保護:int型__thiscall メインフレーム:: OnCreate関数(構造体tagCREATESTRUCTA *)" (OnCreateの@メインフレーム@@ IAEHPAUtagCREATESTRUCTA @@@ Z)

class CForcesEditorDialog; 

class MainFrame : public CFrameWnd 
{ 
    CForcesEditorDialog* forcesEditorDialog;  

public: 
    MainFrame();  
    ~MainFrame(); 
    //virtual void CreateChildControls(void); 
    //afx_msg void OnMouseMove(UINT, CPoint); 

protected: 
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); 
    DECLARE_MESSAGE_MAP() 
}; 

int MainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
    forcesEditorDialog = new CForcesEditorDialog(this,this);//CForcesEditorDialog(this,this); 
} 




class CForcesEditorDialog : public CDialog 
{ 
    //For including ForcesBar 
    ForcesBar* m_forcesBar; 
    MainFrame* pMainFrame; 
public: 
    CForcesEditorDialog(CWnd* _pParentWnd = NULL, MainFrame* _pMainFrame = NULL); // standard constructor 
} 

CForcesEditorDialog::CForcesEditorDialog(CWnd* _pParentWnd, MainFrame* _pMainFrame) 
: CDialog(IDD_CUR_DIALOG, _pParentWnd), 
     p_expander (0), 
     p_selectedItem(0), 
     m_enabled  (false) 
{ 
    m_forcesBar = new ForcesBar(); 
    pMainFrame = _pMainFrame; 
} 

このプロジェクトを含むことに問題があるかもしれません。私は2つのプロジェクトで決して解決策を見たことがありませんでした。あなたはそれについて何か考えましたか?

+0

プロジェクトが依存するものをプロジェクトで参照できるように、必要なプロジェクト参照を追加しましたか? (両方のプロジェクトがお互いに依存している場合は、循環参照の問題があるかもしれません。) –

+0

私は循環的な再定義はありません。 * .hファイルでは、ポインタのみを使用し、これらのポインタのクラスはそのようなファイルに含めません。 * .cppファイルには必要なものがすべて含まれています。 – Diego666

+0

プロジェクトAがプロジェクトBに依存する場合、プロジェクトAからプロジェクトBへの参照を追加しないかぎり、リンカーは最終ビルド製品に両方のプロジェクトを追加することを認識しません(失敗する)。(プロジェクトA>参照を右クリックする> Add)をクリックします。もう1つの方法は、@ Javierが示唆するように、プロジェクトBからプロジェクトAに.lib出力ファイルを手動で追加することです。 –

答えて

3

リンクエラーが発生しました。 Visual Studioはコンパイル時にCForcesEditorDialogを検出しますが、リンク時には発生しませんでした。 2番目のプロジェクトの.libファイルを最初のプロジェクト設定(Property Pages -> Linker -> Input -> Additional Dependencies)に追加する必要があります。

希望します。

+0

これを実現するもう1つの方法は、2番目のプロジェクトへのプロジェクト参照を最初のプロジェクトに追加することですが、循環プロジェクト参照が問題になる可能性があります。 –

0

は、クラスのメインフレーム

前にカット-pastingクラスCForcesEditorDialogを試しトリックを行う必要があります

+0

このクラスを1つのファイルに入れることを意味しますか? – Diego666

+0

私はあなたが1つのファイルにそれらを持っていると思った。 CForcesEditorDialogをMainFrameの前に置く必要があります(ここには表示されないので、ヘッダーも含めてください) – fazo

+0

私は試してみます。 thanks – Diego666

0

プロジェクトのどのような種類CForcesEditorDialogはしているのですか?それは静的なlibか動的なdllですか?

動的である場合、exeで使用するdllから関数とクラスをエクスポートする必要があります。このチュートリアルでは、エクスポートについて言及しています。http://www.codeguru.com/cpp/cpp/cpp_mfc/tutorials/article.php/c4017/MFC-DLL-TUTORIAL-PART-1.htm

AFX_EXT_CLASSあなたは例えば、あなたのDLLからエクスポートするために、あなたのクラス宣言でそれを使用します。:

class AFX_EXT_CLASS CForcesEditorDialog : public CDialog 
{ 
+0

1番目と2番目のプロジェクトのタイプは静的ライブラリ(.lib)です。 – Diego666

+0

その場合、Javier De Pedroの答えが必要な解決策になるかもしれません。 –

1

コンパイルプロジェクトのCForcesEditorDialog一部ですか?つまり、このエラーメッセージを表示するプロジェクトにCForcesEditorDialogの実装ファイル(cpp)が含まれていますか? 別のプロジェクトまたはDLLの一部ですか?

+0

エラーが表示されたら、私はすべてのプロジェクトでソリューションを構築します。 – Diego666

+0

forceEditorDialog = new CForcesEditorDialog(これ、これ)という行にエラーメッセージが表示されます。 CForcesEditorDialogは、このプロジェクトで使用したい2番目のプロジェクトの一部です。 CForcesEditorDialogは、2番目のプロジェクトの他のクラスとの関係が複雑です。したがって、ヘッダーファイルの最初のプロジェクトでは、という行を使用しますが、.cppファイルでは、すべてにを記述します。 – Diego666

関連する問題