我在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(' ');
}
如何调用键盘构造函数?
答案 0 :(得分:6)
如果keyboard
是指针,则语法应为
Game::Game(int width, int height)
: world(width, height),
renderer("Game", 800, 600),
keyboard(new Keyboard)
{ ... }
text
/ font
如果它们也是指针,也应该这样做。
我不想冒犯你,但这是关于指针/实例如何在C ++中工作的一个非常基本的问题。如果您在阅读该语言之前通过编写和尝试代码来学习C ++,那么请考虑先投入一些时间来阅读。
原因是C ++是一种可怕的语言,可以通过实验来学习,主要有两个原因:
并非一切都合乎逻辑。许多C ++规则是语言和委员会决策演变的结果。对问题最明显的答案通常不是C ++中的正确答案。了解这种语言的唯一方法就是阅读它。
语言的主要哲学是程序员永远不会犯错误。在其他语言中,当你犯了一个错误时,运行错误天使"停止程序并告诉你出了什么问题。在C ++中,当你犯了一个错误时,一个"未定义的行为守护进程"取得代码的合法所有权,并会尽力使你造成最大的损害,例如让程序无论如何都要默默地运行一段时间,直到你决定向某人展示它,然后才会崩溃它。
混合1 + 2是非常危险的:语言很复杂,你不会被告知错误。请帮自己一个忙,先阅读a good C++ book封面。