我正試圖在我的程式中用以下方法覆寫函式,但在編譯時,它顯示變數1在派生清除函式中是未定義的。
當將派生類改為非模板時,我已經能夠讓它發揮作用,但隨后在啟動Base的模板時,我缺少了DATATYPE和VALUE變數。
template < class DATATYPE=short, short VALUE = 100>。
class Base {
public:
Base()。
virtual void clear()=0;
protected:
int variable1;
}
template < class DATATYPE=short, short VALUE = 100>
class Derived : public Base<DATATYPE, VALUE> {
public:
Derived()。
void clear() {
int testVar = variable1;
}
}
uj5u.com熱心網友回復:
你的代碼的編譯版本:
template <typename data_t, short value_v>
class Base
{
public:
Base() = default; // <== was missing impl, set to default
virtual ~Base() = default; //帶有虛擬方法的類必須有虛擬析構器。
virtual void clear()= 0;
protected:
int variable1;
};
template < typename data_t = short, short value_v = 100>
class Derived :
public Base<data_t, value_v>
{
//通過添加一個using,你可以更容易地改變模板的引數。
//無需更新所有的代碼。這也有助于保持代碼的可讀性。
使用 base_t = Base<data_t, value_v> 。
public:
void clear() override // <== missing override
{
///在模板基類中訪問成員的不同方式{
int v1 = Base<data_t, value_v> ::variable1;
int v2 = this-> variable1;
int v3 = base_t::variable1;
}
};
int main()
{
Derived<short,100> d.
d.clear()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/315766.html
標籤:
