我先举一个错误的例子看看我们的代码有没有相似之处:

#include<iostream>
#include<string>


using namespace std;
class student {
    int m_nu;
    string m_name;
public:
    student() {
        cout << "默认构造函数的创建" << endl;

    }
    student(int m, string n) :m_nu(m), m_name(n) {}
    ~student();
    friend void xianshi(const student& p) ;
};

//student::student(int m, string n) :student(m_nu, m_name) {};
void xianshi(const student& p) {
    cout << p.m_nu << ":" << p.m_name << endl;
}
void test() {

    student p1;
    student p2(1, "xiaoyun");
    xianshi(p2);
    p1 = p2;
    xianshi(p1);



    //xianshi(p2);


}


int main() {

    test();

    return 0;
}

乍一看,代码写的很完整啊,没有任何问题,构造和析构函数都已经写好了的,但是一旦运行就会出现以下的错误:

1>------ 已启动生成: 项目: c++类练习, 配置: Debug Win32 ------
1>类和动态内存分配.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall student::~student(void)" (??1student@@QAE@XZ),该符号在函数 "void __cdecl test(void)" (?test@@YAXXZ) 中被引用
1>C:\Users\Xiaoyun\source\repos\c++类练习\Debug\c++类练习.exe : fatal error LNK1120: 1 个无法解析的外部命令
1>已完成生成项目“c++类练习.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

编译器说我的错误在于,我的析构函数被引用了。 ~~~~~这当然啦,我不引用他我写他干嘛???逗编译玩吗!!
后来我多方查证,但都没有啥好的效果,于是我转向类定义和声明的这一部分,我突然想到一件事:类中定义的东西,如果要用的话,是不是一定要先声明一下呢??? 本着实践是检验真理的唯一标准,我试了一下,对~student()写了一个声明,你猜如何,没问题了。
所以我们在写程序的时候,不要一味的觉得,我明白这个东西怎么用了,这个想法是不行的,还得动手去操作,用实践去检验自己的想法。

分类: 杂谈

0 条评论

发表评论

电子邮件地址不会被公开。