【发布时间】:2021-04-21 23:38:18
【问题描述】:
当我在 main 中声明 Game 对象时,我不断收到://C2512:没有合适的默认构造函数可用,我正在使用 Visual Studio,在其他编译器上,错误并不总是出现。
我试图改变定义和初始化的方式,但它一直给我同样的错误,就像考试中的一个问题是有默认的参数化构造函数,其中一个参数是组合中的另一个类对象,但我在代码中这样做它给了我上面的错误
那么在使用组合时如何使用默认构造函数???
#include <iostream>
#include <string>
//#include "Game.h"
//#include "Screen.h"
using namespace std;
class Screen
{
private:
int resolution;
int brightness;
string color;
public:
Screen(int br = 20, int rl = 10, string colr = "green");
};
Screen::Screen(int br, int rl, string colr) :resolution(rl), brightness(br), color(colr) {}
class Game {
protected:
string name;
Screen screen1;
public:
Game(Screen& ok, string nam = "minecraft");
};
Game::Game(Screen& ok, string nam) : screen1(ok), name(nam)
{ }
int main()
{
//Screen screen1;
Game gg;
return 0;
}
//screen1 = ok;
【问题讨论】:
-
将
Screen() = default;添加到您的类定义中? -
还有其他方法吗?
-
当然:
Screen() {}也可以。或者在创建Screen实例时传递所需的构造函数参数。 -
如果没有默认构造函数,则不能调用默认构造函数,因为不存在。您是否尝试过为
gg对象调用main中的可用构造函数? -
您应该在创建
gg时传递Screen实例。
标签: c++ visual-c++ constructor default-constructor