zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    Springboot html映射
    table 合并单元格
    Idea中Spring Boot 启动出错
    Modal模态框scrolltop保留上次位移的解决方案
    8、如何实现浏览器的前进、后退操作?
    html中table并排展示
    两个有序的链表的合并
    7、链表(下):如何轻松写出正确的链表代码?
    2018.10.12
    c语言关键字:const
  • 原文地址:https://www.cnblogs.com/Manual-Linux/p/11544996.html
Copyright © 2011-2022 走看看