You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++编译出现undefined reference to默认构造函数报错如何解决?

问题原因

你只在类中声明了无参构造函数Number(),但没有提供对应的实现,而代码中Number num_3;的写法会触发该无参构造的调用,链接阶段找不到函数定义就会报undefined reference错误。你用到的Number num_2(num_1)是编译器自动生成的默认拷贝构造,和当前报错无关。

解决方法

只要给无参构造函数补充实现即可,完全满足你保留2个构造函数、不修改num_3定义的要求,有两种常用写法可选:

写法1:类内直接实现无参构造

#include <iostream>
using namespace std;

class Number
{
    int a;

public:
    // 补充无参构造的类内实现,可给成员变量设置合理默认值
    Number() {
        a = 0;
    }

    Number(int num_1) {
        a = num_1;
    }

    void print_number(void) { cout << "Value of a is " << a << endl; }
};

int main()
{
    Number num_1(33), num_3;
    Number num_2(num_1);

    num_2.print_number();
    return 0;
}

写法2:类外实现无参构造

如果需要实现声明和定义分离,可把无参构造的实现放在类外部:

#include <iostream>
using namespace std;

class Number
{
    int a;

public:
    Number(); // 保留类内声明
    Number(int num_1) {
        a = num_1;
    }

    void print_number(void) { cout << "Value of a is " << a << endl; }
};

// 类外实现无参构造
Number::Number() {
    a = 0;
}

int main()
{
    Number num_1(33), num_3;
    Number num_2(num_1);

    num_2.print_number();
    return 0;
}

两种写法编译运行后都会正常输出Value of a is 33,符合预期。

内容的提问来源于stack exchange,提问作者Aman Rathore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:27:06