名前付きの構造体を保持するためのリスト型が必要で、ポインターで表される同じ型の任意の数のメンバーが必要でした。完全なプロジェクト コードは Qt を使用します (それが重要な場合)。
だから私はこれを書いた:
/*
* This should be used with T as a pointer type.
* Code gets really incomprehensible if T* value is used as member.
*/
template <typename T>
struct parameter_t {
QString name;
int count;
T value;
};
template <typename T>
class Parameters {
private:
typedef struct parameter_t< T > content_t; // beautification
public:
void addParam(const QString &name, T value, int count);
private:
std::list< content_t >* params;
};
typedef Parameters<float*> floatParameters; // beautification
実際の実装ではエラーのないコンパイルなどが行われるため、私には正当以上のように思えます。
今、別の場所から、次のように呼び出しています。
floatParameters* params = new floatParameters();
params->addParam("Ente", (float*) x, 1);
これにより、次のようなコンパイラ エラーが発生します。
In function `...': HelperClasses.cc:(.text+0x225): undefined reference to Parameters<float*>::addParam(QString const&, float*, int)'
ご覧のとおり、floatParameters を作成しているので、Parameters です。つまり、addParam メンバーは次のように変換する必要があります。
void addParam(const QString &name, float* value, int count);
このエラーが発生するのはなぜですか?