未定义引用构造函数问题

Ama*_*ore 0 c++ oop constructor class c++11

请参阅下面给出的代码

#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; }
};

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

    num_2.print_number();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我在同一个类中有 2 个构造函数,但是在编译它时,给了我错误

ccnd0o9C.o:xx.cpp:(.text+0x30): undefined reference to `Number::Number()'
collect2.exe: error: ld returned 1 exit status  
Run Code Online (Sandbox Code Playgroud)

有人能解决这个问题吗?我仍然需要 2 个构造函数,但不需要num_3num_3()main 函数替换。

JeJ*_*eJo 5

在您的类中,您已声明默认构造函数,但尚未定义它。

你可以default这么做(C++11 起),然后你就可以开始了:

Number() = default;
Run Code Online (Sandbox Code Playgroud)

否则:

Number() {}
Run Code Online (Sandbox Code Playgroud)

正如 @TedLyngmo 喜欢的帖子一样,两者的行为相同,但根据标准,该类将获得不同的含义。更多内容请阅读: C++11 中的新语法“= default”


@Jarod42 的评论作为旁注:默认构造函数在为成员提供默认值时才有意义a。否则它将是未初始化的(不确定值)并且读取它们将导致 UB

  • 这是最好的方法。请参阅[原因](/sf/answers/1458027931/) (3认同)