3

非型パラメーター (具体的には、固定次元の固有行列ですが、問題も存在します) に依存するメンバー変数を使用して、非型のテンプレート化されたクラスを作成しようとしていますintわかりやすくするために、メンバー型を typedef しました。これは、メンバー関数が typedef を返すようになるまでうまく機能し、その時点で次のエラーが発生し始めました。

myClass.cpp:10: エラー: 'myClass' の前にコンストラクタ、デストラクタ、または型変換が必要です</p>

少なくとも概念的には、これは私の typedef がテンプレートに依存し、結果として C++ が混乱しているという事実と関係があることを理解しています。問題は、私がさらに混乱していることです。 の単純な挿入をいくつか試しましtypenameたが、何も修正されませんでした。

最小限の実例。

ヘッダ:

template <int i> class myClass
{
  public:
    typedef int myVector_t;

    myClass();
    myVector_t myFunc();
};

ソースコード:

#include <myClass.hpp>

template <int i>
myClass<i>::myClass()
{
  //blah
}

template <int i>
myClass<i>::myVector_t  myClass<i>::myFunc()        //<----- Line 10
{
  //blah
}

洞察をいただければ幸いです。

編集:答え

以下で説明するように、解決策はtypename実装にキーワードを含めることですが、宣言には含めません。

typename myClass<i>::myVector_t  myClass<i>::myFunc()        //<----- Line 10

編集2

固有値から離れて質問を一般化

4

1 に答える 1

5

関数の定義内の名前myVector_tは実質的にテンプレート パラメーターに依存するため、次のような型であることをコンパイラーに知らせる必要がありますtypename

template <int i>
typename myClass<i>::myVector_t  myClass<i>::myFunc()        //<----- Line 10
{
  //blah
}
于 2013-07-31T20:15:33.307 に答える