构造函数不称为c ++

时间:2014-03-24 19:57:11

标签: c++

我在DLL中有这个代码:

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

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(' ');
}

如何调用键盘构造函数?

1 个答案:

答案 0 :(得分:6)

如果keyboard是指针,则语法应为

Game::Game(int width, int height)
  : world(width, height),
    renderer("Game", 800, 600),
    keyboard(new Keyboard)
{ ... }

text / font如果它们也是指针,也应该这样做。

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

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

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

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

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