2012-02-13 9 views
1

私はdev C++を使用しています。私は自分のC++プロジェクトのために他の誰かによって開発されたライブラリから助手を貰っています。私はTriangleListTriangleListsという2つの新しいクラスをライブラリに追加しました。私はプロジェクトの新しいクラスタイプを望んでいました。一度、私はライブラリにhppとcppファイルを追加しました。私はcreating ../lib/libExtraction.aのようなマッサージを受けました。私は関数をコールバックするとき しかし、私は新しいクラスで書かれていることを、私自身のプロジェクトから、私は、その後、ライブラリにhppファイルとcppファイルがリンカーエラーで追加されました

`[Linker error] undefined reference to `TriangleLists::Erase()` 

(消去機能のための上記1) のようなエラーマッサージを得たとき、私.cppファイルを削除し、.hpp内のすべてを書きました。

しかし、hppとcppの2つのファイルをさらに管理したいと思います。ですから、このリンクエラーの問題を解決する方法を教えてください。私はこれを学びたいと思っています。前もって感謝します。

答えて

0

あなたがチェックする必要がある最初の事は、クラスをエクスポートしている場合です:

class __declspec(dllexport) TriangleLists 
{ 
//members 
}; 

あなたはしかし、別のプロジェクトにヘッダーが含まれている場合、あなたはそう、クラスがインポートされるように指定する必要があります。

class __declspec(dllimport) TriangleLists 
{ 
}; 

これは通常、プリプロセッサディレクティブを用いて達成される:

#ifdef BUILDING_FIRST_PROJECT 
#define DLLIMPEXP _declspec(dllexport) 
#else 
#define DLLIMPEXP _declspec(dllimport) 
#endif 

//TriangleLists.h 
class DLLIMPEXP TriangleLists 
{ 
} 

とdのみあなたの最初のプロジェクトでBUILDING_FIRST_PROJECTを入力してください。こうすることで、最初のプロジェクトをビルドするときにクラスをエクスポートし、別のプロジェクトにヘッダーを組み込むときにインポートすることになります。

第2のことは、もう1つのプロジェクトは、最初のプロジェクトで生成された.libファイルにリンクする必要があることです。

実装をヘッダーに移動したときの理由は、メソッドがinlineになるため、定義が既にわかっているので、libファイルにそのメソッドのルックアップはありません。

+0

私は申し訳ありませんが、これは私が初めてライブラリを使用し、クラスをライブラリに追加するので、これを行う方法はわかりません。 (私もDev C++を使用しています)。だから、私はどのように私はテストを行う必要があります教えてください? – gnp

+0

実際には、ライブラリから既存のhppをコピーして名前を変更し、その上に関数を書きました。また、私は同じことをしたcppのために。申し訳ありませんが、私は何もエクスポートを行いませんでした。助けてください。 – gnp

+0

@ user1199463 Dev C++の使い方はわかりませんが、ライブラリを追加する必要がある追加のリンクライブラリを指定するプロジェクト設定/プリファレンスにはいくつかのオプションが必要です。 –

関連する問題