VS2017报错:未提供初始值设定项

今天在使用VS2017写程序时,报错:

出错的代码如下:

#include "pch.h"
#include <iostream>
#include <thread>
using namespace std;

class TA
{
public:
    TA(int &i);
    ~TA();
    //TA(const TA& ta);  //拷贝构造函数
    void operator()()
    {
        cout << "我的线程开始执行了" << endl;


        cout << "我的线程结束了" << endl;
    }
private:
    int &m_i;
};

TA::TA(int &i)
{
    this->m_i = i;
    cout << "TA的构造函数" << endl;
}

TA::~TA()
{
    cout << "TA的析构函数" << endl;
}
//
//TA::TA(const TA &ta)
//{
//  this->m_i = ta;
//}

int main()
{
    int i = 6;
    TA ta(i);
    thread mytobj(ta);
    mytobj.join();

    cout << "主线程执行结束" << endl;

    return 0;
}

在网上查找资料后找到原因:

可以初始化const对象或引用类型的对象,但不能对他们赋值。在开始执行构造函数的函数体之前,必须完成初始化。初始化const或引用类型数据成员的唯一机会是在构造函数初始化列表中。

也就是说在类TA中声明了引用m_i,只能在构造函数初始化列表中进行初始化。

将上面的代码修改如下后错误消失:

#include "pch.h"
#include <iostream>
#include <thread>
using namespace std;

class TA
{
public:
    TA(int &i) :m_i(i) {};
    ~TA();
    //TA(const TA& ta);  //拷贝构造函数
    void operator()()
    {
        cout << "我的线程开始执行了" << endl;


        cout << "我的线程结束了" << endl;
    }
private:
    int &m_i;
};

TA::~TA()
{
    cout << "TA的析构函数" << endl;
}
//
//TA::TA(const TA &ta)
//{
//  this->m_i = ta;
//}

int main()
{
    int i = 6;
    TA ta(i);
    thread mytobj(ta);
    mytobj.join();

    cout << "主线程执行结束" << endl;

    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Manual-Linux/p/11544996.html