特定のクラスのインライン メンバー関数を使用しようとしています。たとえば、インライン化なしの関数の宣言と実装は次のようになります。
ヘッダーファイル内:
int GetTplLSize();
.cpp ファイル内:
int NeedleUSsim::GetTplLSize()
{
return sampleDim[1];
}
何らかの理由で、実装と宣言のいずれか、または両方の場所に「inline」キーワードを配置すると、次のようなリンカー エラーが発生します。
ライブラリ C:\DOCUME~1\STANLEY\LOCALS~1\TEMP\MEX_HN~1\templib.x とオブジェクト C:\DOCUME~1\STANLEY\LOCALS~1\TEMP\MEX_HN~1\templib.exp を作成しています mexfunction.obj: エラー LNK2019: 関数 _mexFunction で参照されている未解決の外部シンボル "public: int __thiscall NeedleUSsim::GetTplLSize(void)" (?GetTplLSize@NeedleUSsim@@QAEHXZ) mexfunction.mexw32: 致命的なエラー LNK1120: 未解決の外部が 1 つあります C:\PROGRA~1\MATLAB\R2008B\BIN\MEX.PL: エラー: 'mexfunction.mexw32' のリンクに失敗しました。
このエラーを解消するには何が必要ですか (つまり、これらのインライン メンバー関数を作成する際に何が間違っているのでしょうか)?
ベストアンサー1
次に、関数定義をヘッダーに配置する必要があります。コンパイラにインライン化を指示する最も簡単な方法は、次のようにクラス宣言にメソッド本体を含めることです。
class NeedleUSsim
{
// ...
int GetTplLSize() const { return sampleDim[1]; }
// ...
};
または、宣言と定義を別々にしたい場合:
class NeedleUSsim
{
// ...
int GetTplLSize() const;
// ...
};
inline int NeedleUSsim::GetTplLSize() const
{ return sampleDim[1]; }
そのメソッドを使用する各翻訳単位で定義が表示される必要があります。