C++ 不能使用默认构造函数的情况

类中含有const引用类型成员变量时编译级别禁止使用默认构造函数,含有指针运行时级别不能默认构造函数。

测试代码(public成员变量仅为测试使用):

#include <iostream>
using namespace std;

class testOperater
{
private:
	const int& num;
	const char* name;
};

int main() {
	testOperater test;
	system("pause");
	return 0;
}

Visual Studio 2019 报错如下:
E1790
无法引用 “…” 的默认构造函数 – 它是已删除的函数

原因分析:

已删除的函数指的是:

testOperater() = delete;

相当于编译器(Visual Studio 2019)帮我们自动添加了这一条语句,原因就是有const或者引用类型的成员变量不能默认初始化

解决方案:只能自己定义构造函数

修改测试代码:

#include <iostream>
using namespace std;

class testOperater
{
public:
	testOperater() :num(1), name("sfd") {
	}
private:
	const int& num;
	const char* name;
};

int main() {
	testOperater test;
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41017648/article/details/90044087
今日推荐