提问人:Elijah Campbell 提问时间:8/21/2023 更新时间:8/21/2023 访问量:80
为什么我不能实例化类中的对象?
Why can't I instantiate an object in a class?
问:
我有这三个代码:
#pragma once
class Rect
{
private:
int m_Thing;
public:
Rect(int thing)
{
m_Thing = thing;
}
void create(int thing)
{
m_Thing = thing;
}
};
#pragma once
#include "Rect.h"
class Brick
{
private:
Rect floatRect;
public:
Brick()
{
floatRect.create(28);
}
};
#include "mre.h"
#include <iostream>
int main()
{
Brick brick;
}
出于某种原因,我收到一个错误,说我需要一个默认构造函数。我做了一个,然后在 Rect 对象上收到一个未解决的外部符号错误。这就是我被困住的地方。如何实例化它?
答:
1赞
Karen Baghdasaryan
8/21/2023
#1
调用类的默认构造函数时,除非以其他方式指定,否则其所有成员都是默认构造的。如果我们想写出在 的调用中明确发生的事情,它看起来像这样。Brick()
Brick() : floatRect()
{
floatRect.create(28);
}
在这里,我们可以看到,在成员初始值设定项列表中,它尝试调用默认构造函数 ,该构造函数被隐式删除,因为您有一个用户定义的构造函数。如果要创建,可以执行以下操作。Rect
Rect
Brick() : floatRect(28)
{
}
成员初始化字段专门用于初始化参数或将参数传递给成员的构造函数。
评论
explicit
explicit Rect(int value)
Brick
floatRect
Rect
Brick
Brick() : floatRect(28) { /* Empty constructor body */ }
create