簡體   English   中英

每當我使用純虛函數時,“錯誤:未解析的外部符號”

[英]“Error: Unresolved external symbol” whenever I use a pure virtual function

我覺得我做的事情非常愚蠢,但我根本無法弄清楚我的代碼有什么問題。 我甚至制作了代碼的超級簡化版本,但仍然出現錯誤:

#include <iostream>

using namespace std;

class c1{
public:
    c1(){}
    ~c1(){}

    virtual int add(int a, int b);

private:
protected:


};

class c2 : c1{
public:
    c2(){}
    ~c2(){}

    int add(int a, int b){
        return a+b;
    }

};

int main(){

    c2 c;
    c.add(5,6);

}

任何人都可以發現我確信有史以來最愚蠢的錯誤嗎?

這是確切的錯誤消息:

1>main.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall c1::add(int,int)" (?add@c1@@UAEHHH@Z)
virtual int add(int a, int b);

這不是純虛函數的聲明。 它只是一個虛函數的聲明。 它沒有定義,這就是你得到錯誤的原因。

virtual int add(int a, int b) = 0;

這是純虛函數的聲明。 它不需要定義,這就是為什么不會得到錯誤。

您收到鏈接器錯誤,因為未實現c1::add(int,int) 要么是純粹的虛擬,要么實現它。

c1::add()不是純虛擬的,它只是沒有實現。 這意味着鏈接器在查找正文時是正確的,並且在找不到正文時更正。 你可能意味着這個:

class c1{
public:
    c1(){}
    ~c1(){}

    virtual int add(int a, int b) = 0;  // adding = 0 makes the function pure virtual

private:
protected:


};

c1.add不是純虛擬的,你必須添加= 0

virtual int add(int a, int b) = 0; 

change virtual int add(int a,int b); to virtual int add(int a,int b)= 0;

virtual int add(int a, int b); 這意味着“我的函數add可以被子類化”。 在另一個是“我的功能add可以是子類,並且是純虛擬的”你需要

virtual int add(int a, int b) = 0;

暫無
暫無

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

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