[英]“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.