构造函数不称为c ++

Tip*_*s48 2 c++

我在DLL中有这个代码:

Game::Game(int width, int height)
   : world(width, height),
     renderer("Game", 800, 600),
     font(),
     text(),
     keyboard()
{
    // Code
}
Run Code Online (Sandbox Code Playgroud)

keyboard是一个指向Keyboard对象的指针.调用构造函数中的代码,但键盘对象保持为null.为什么没有创建对象?

键盘构造函数:

Keyboard() {
 A = new Key('a');
 B = new Key('b');
 C = new Key('c');
 D = new Key('d');
 E = new Key('e');
 F = new Key('f');
 G = new Key('g');
 H = new Key('h');
 I = new Key('i');
 J = new Key('j');
 K = new Key('k');
 L = new Key('l');
 M = new Key('m');
 N = new Key('n');
 O = new Key('o');
 P = new Key('p');
 Q = new Key('q');
 R = new Key('r');
 S = new Key('s');
 T = new Key('t');
 U = new Key('u');
 V = new Key('v');
 W = new Key('w');
 X = new Key('x');
 Y = new Key('y');
 Z = new Key('z');

 ZERO = new Key('0');
 ONE = new Key('1');
 TWO = new Key('2');
 THREE = new Key('3');
 FOUR = new Key('4');
 FIVE = new Key('5');
 SIX = new Key('6');
 SEVEN = new Key('7');
 EIGHT = new Key('8');
 NINE = new Key('9');

 ARROW_UP = new Key(' ');
 ARROW_DOWN = new Key(' ');
 ARROW_LEFT = new Key(' ');
 ARROW_RIGHT = new Key(' ');

 SHIFT = new Key(' ');
}
Run Code Online (Sandbox Code Playgroud)

如何调用键盘构造函数?

650*_*502 6

if keyboard是语法应该是指针

Game::Game(int width, int height)
  : world(width, height),
    renderer("Game", 800, 600),
    keyboard(new Keyboard)
{ ... }
Run Code Online (Sandbox Code Playgroud)

对于text/ font如果它们也是指针也应该这样做.

我不想冒犯你,但这是关于指针/实例如何在C++中工作的一个非常基本的问题.如果您在阅读语言之前通过编写和尝试代码来学习C++,那么请考虑先花一些时间来阅读.

原因是C++是一种通过实验学习的可怕语言,主要有两个原因:

  1. 并非一切都合乎逻辑.许多C++规则是语言和委员会决策演变的结果.对问题最明显的答案通常不是C++中的正确​​答案.了解语言的唯一方法是阅读它.

  2. 语言的主要哲学是程序员永远不会犯错误.在其他语言中,当您犯错误时,"运行时错误天使"会停止程序并告诉您出了什么问题.在C++中,当你犯了一个错误时,一个"未定义的行为守护进程"取得了代码的合法所有权,并会努力使你造成最大的损害,例如让程序无论如何都要默默地运行一段时间直到你决定将它展示给某人,并且只在那时崩溃.

混合1 + 2是非常危险的:语言很复杂,你不会被告知错误.请帮自己一个忙,先阅读一本好的C++书籍封面.