1

2 つのヘッダー (.hh) ファイルがあり、これらのファイルの両方でいくつかの関数が定義および実装されています。

私が望むのは、ヘッダーファイルAの実装から他のヘッダーファイルの関数を呼び出すことです(Bと呼びましょう)。

これが私が持っているものです:

//headerA.hh
LSQUnit<Impl>::read(...args....)
   ...
callfunction(...args...);
}

call 関数の実装は、次のような他のヘッダー ファイルにあります。

// headerB.hh   
template<class Impl>
    inline void
    BaseDynInst<Impl>::callfunction (...args...){
       ....
    }

これらをheaderA.hhに追加しました:

#include "headerB.hh"
....
void call function (...args...)

しかし、headerA.hhでcallfunctionへの未定義の参照を取得します

私もこれらを試しました:

headerA.hh から呼び出すと

callfunction<BaseDynInst> callfunction (...args...)

または、この実装を headerB.hh に追加します。

LSQUnit<Impl>::callfunction(...args...)

しかし、彼らは私にもっと多くのエラーを与えました。

実装を .hh 内に配置するのは理想的ではないことはわかっていますが、私が作成したものではないシミュレーターを使用しているため、状況が悪化するため、それを変更することはできません。

私が望むことは可能ですか、それとも唯一の解決策は headerA.hh 内に関数を実装することですか? headerB.hh に存在する他の多くのものを呼び出すので、それを避けたいですか?

4

1 に答える 1

2

テンプレートクラスの非静的メンバー関数のようcallFunctionです。それを呼び出す正しい方法は

LSQUnit<Impl> something;
something.callFunction(...);

つまり、 を所有するクラス タイプのオブジェクトcallFunctionが必要です。この場合something


この構文

LSQUnit<Impl>::callfunction(...args...)

静的メンバー関数を呼び出すためのものです。

于 2013-04-30T15:07:34.177 に答える