c++中对析构函数错误的未定义引用

Undefined reference to destructor error in c++?

本文关键字:未定义 引用 错误 析构函数 c++      更新时间:2023-10-16

这是类

class Email{
private:
    char to[100];
    char from[100];
    char subject[200];
    char body[1000];
public:
    Email();
    Email(char *za,char *od,char *tema, char *telo){
    strcpy(to,za);
    strcpy(from,od);
    strcpy(subject,tema);
    strcpy(body,telo);
    }
    ~Email();
    void setTo(char *to) {strcpy(this->to,to);}
    void setFrom(char *from) {strcpy(this->from,from);}
    void setSubject(char *subject) {strcpy(this->subject,subject);}
    void setBody (char *body) {strcpy(this->body,body);}
    char* getTo () {return to;}
    char* getFrom () {return from;}
    char* getSubject () {return subject;}
    char* getBody () {return body;}
    void print () {
    cout<<"To: "<<to<<endl<<"From: "<<from<<endl<<"Subject: "<<subject<<endl<<body;
    }
};

正如你所看到的,它包括一个析构函数。程序的其余部分只是一个函数和主函数。

int checkEmail(char *p){
int n=0,i=0;
while(p[i]!='')
{if(p[i]=='@')
n++;
i++;}
if(n==1)
    return 1;
else return 0;
    }
int main()
{
    char od[100],za[100],tema[200],telo[1000];
     cout<<"Za: ";
    cin>>za;
    if(checkEmail(za)){
    cout<<"Od: ";
    cin>>od;
    cout<<"Tema: ";
    cin>>tema;
    cout<<"Poraka: ";
    cin>>telo;
    Email o(od,za,tema,telo);
    cout<<"Isprateno: ";
    o.print();
}
     else cout<<"Pogresna adresa!";
}

它给出一个错误

  1. obj\Debug\main.o||在函数"main"中:|
  2. C: \Users\Stefan\Desktop\EMail\main.cpp|58|未定义对"EMail::~EMail()"的引用|
  3. C: \Users\Stefan\Desktop\EMail\main.cpp|58|未定义对"EMail::~EMail()"的引用|
  4. ||===生成已完成:2个错误,0个警告(0分1秒)===|

在包含o.print()的行中;那是什么呢?还有人能告诉我如何突出显示代码中的一些行吗?

您正在声明一个析构函数;

~Email();

但不是为它定义一个身体。也许你的意思是;

~Email() { }

或者如果它没有任何功能就把它排除在外?

(您还缺少默认构造函数的主体声明)

您必须定义析构函数,而不仅仅是声明它。没有可见的实现。这样做:

~Email() {
//Whatever you want your destructor to take care of
}

如果你不想对析构函数做任何事情,那就不要声明它。还要确保你对构造函数做同样的事情。看起来你可能也有同样的问题。