当我在main中声明游戏对象时://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;
Game(string nam = "minecraft") : screen1(Screen()), name(nam) {}
screen1(Screen())用默认参数创建一个Screen对象并赋值给screen1。
整个程序:
#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"):resolution(rl), brightness(br), color(colr) {}
};
class Game {
public:
Game(string nam = "minecraft") : screen1(Screen()), name(nam) {}
protected:
Screen screen1;
string name;
};
int main()
{
//Screen screen1;
Game gg;
return 0;
}
构造函数Game(Screen& ok, string nam = "minecraft");
需要获取Screen
对象的引用。
当你像这样创建Game
对象时:Game gg;
没有Screen
对象的引用。
Screen s;
Game gg(s);
另一个技巧是将实现放在其他文件或声明它的地方。所以
Screen::Screen(int br, int rl, string colr) :resolution(rl), brightness(br), color(colr) {}
和Screen(int br = 20, int rl = 10, string colr = "green");
是:
Screen(int br = 20, int rl = 10, string colr = "green")
:resolution(rl), brightness(br), color(colr) {}