我一直在努力解決這個問題一段時間,似乎無法用所有的模板和專業化解決問題。我想我錯過了靜態功能internal_set_BC
的定義,但我不確定。當我編譯下面的代碼,我收到以下錯誤:錯誤:不完整類型的使用無效(也許是一個定義問題)
test.cc:37:49: error: invalid use of incomplete type ‘class RT<2, D>’
static void RT<2, D>::internal_set_BC(D& d, T& t)
^
test.cc:19:7: error: declaration of ‘class RT<2, D>’
class RT: public BC<n, D>
^
test.cc:41:49: error: invalid use of incomplete type ‘class RT<3, D>’
static void RT<3, D>::internal_set_BC(D& d, T& t)
^
test.cc:19:7: error: declaration of ‘class RT<3, D>’
class RT: public BC<n, D>
簡化代碼如下:
class A {};
class B {};
class C {};
class E {};
template <int n>
class Base
{};
template <int n, typename D>
class BC: public Base<n>
{
public:
virtual void set_BC(D& d, A& a) =0;
virtual void set_BC(D& d, B& b) =0;
};
template <int n, typename D>
class RT: public BC<n, D>
{
public:
void set_BC(D& d, A& a)
{internal_set_BC(d, a);}
void set_BC(D& d, B& b)
{internal_set_BC(d, b);}
private:
template <typename T>
static void internal_set_BC(D& d, T& t);
};
template <typename D, typename T>
static void RT<2, D>::internal_set_BC(D& d, T& t)
{//code
}
template <typename D, typename T>
static void RT<3, D>::internal_set_BC(D& d, T& t)
{//code
}
而且,當我嘗試實例internal_set_BC
與此代碼:
template void RT<2, C>::internal_set_BC(C& d, A& t);
我得到這個錯誤:
test.cc:45:51: error: explicit instantiation of ‘static void RT<n, D>::internal_set_BC(D&, T&) [with T = A; int n = 2; D = C]’ but no definition available [-fpermissive]
template void RT<2, C>::internal_set_BC(C& d, A& t);
這支持我對上述代碼中缺少定義的懷疑。
您的幫助是非常appriciated。
謝謝!我已經添加了部分專業化(第二段代碼段),並且我不再有錯誤。我想知道是否有參考資料或書籍可以深入解釋模板,從而將這些專業化問題作爲問題的一部分。 –