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
相关产品推荐
相关产品推荐

