簡體   English   中英

通過覆蓋虛擬函數獲取“未解析的外部符號”

[英]Getting 'unresolved external symbol' by overwriting a virtual function

我編寫了一個簡單的界面:(ICopyOnOperator.h)

template<typename T>
class ICopyOnOperator {

    public:
        virtual const T& operator=(const T& other) = 0;

        ICopyOnOperator() = default;

        ICopyOnOperator(const ICopyOnOperator& other) {
            this->operator=((const T&)other);
        }
};

它應該在調用復制構造函數時自動調用operator=函數。 在另一個類中,我從中得出:(Vao.h)

class Vao : public ICopyOnOperator<Vao> {
   ...

   public:
        virtual const Vao& operator=(const Vao& other) override {
            return *this;
        }
};

當我編譯代碼時,出現“無法解析的外部符號”錯誤。 您是否知道為什么(我知道錯誤消息的意思,但是為什么會發生?)還是如何以不同的方式實現我的目標?

[編輯]

說清楚。 鏈接器找不到ICopyOnOperator<class Vao>::operator=(class rhino::Vao const &)方法。 完整的錯誤消息:

1> tester.obj:錯誤LNK2019:未解決的外部符號“ public:虛擬類rhino :: Vao const&__thiscall rhino :: ICopyOnOperator :: operator =(class rhino :: Vao const&)”(?? 4?$ ICopyOnOperator @在函數“公共:__thiscall rhino :: ICopyOnOperator :: ICopyOnOperator(class rhino :: ICopyOnOperator const&)”中引用的VVao @ rhino @@@ rhino @@ UAEABVVao @ 1 @ ABV21 @@ Z)(?? 0?$ ICopyOnOperator @ VVao @ rhino @@@ rhino @@ QAE @ ABV01 @@ Z)

這與您從構造函數中調用虛擬方法( operator= )有關。 從構造函數調用虛擬方法將導致調用在該層次結構級別定義的方法,而不是在實例化的類中定義的方法。

請在此處查看已接受的答案: 在構造函數中調用虛函數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM