0
Sample.hpp、タイプ別名Xのようなクラステンプレートがあります。エイリアスタイプの完全宣言を入力せずに、クラステンプレート定義からタイプテンプレート定義にアクセスできません
#ifndef SAMPLE_HPP
#define SAMPLE_HPP
template<typename STA, typename STB>
class Sample
{
using X = Sample<STA,STB>;
public:
Sample();
inline X* GetNext() const;
private:
X* Next;
};
#include "Sample.cpp"
#endif // SAMPLE_HPP
と定義がsample.cppのです。
#include "Sample.hpp"
template<typename STA, typename STB>
Sample<STA,STB>::Sample() {
Next = nullptr;
}
template<typename STA, typename STB>
typename Sample<STA,STB>::X* Sample<STA,STB>::GetNext() const {
return this->Next;
}
私の質問は、GetNextの関数を定義する任意の他の方法があるということです。たとえば、のタイプ名またはの完全な宣言なしの場合は、クラステンプレートを指定します。私は
template<typename STA, typename STB>
Sample<STA,STB>* Sample<STA,STB>::GetNext() const {
return this->Next;
}
にコードを変更するとそれは動作しますが、私は、たとえば、ここで直接タイプの別名を使用しカント:
template<typename STA, typename STB>
X* Sample<STA,STB>::GetNext() const {
return this->Next;
}
どうもありがとうございます、これをより詳しく説明できますか? –
@CherkesgillerTural確かなこと。だから、 'X *'を最初に置くと、コンパイラは 'X'があるはずなので、エラーになります。しかし、* after *を書くと、コンパイラは 'Sample'の範囲を 'X'で調べることができます。これを前に置いた場合、 'Sample 'にまだ遭遇していないので、 'X 'を探すことはできません。詳細は、[こちら](http://en.cppreference.com/w/cpp/language/function)を参照してください。 –
Rakete1111
ありがとう、@ Rakete111。 –