簡體   English   中英

構造函數不稱為C ++

[英]Constructor not called c++

我在DLL中有以下代碼:

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

keyboard是指向Keyboard對象的指針。 調用了構造函數中的代碼,但是鍵盤對象保持為空。 為什么沒有創建對象?

鍵盤構造函數:

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

如何使鍵盤構造函數被調用?

如果keyboard是指針,則語法應為

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

如果它們也是指針,則對text / font也應執行相同的操作。

我不想冒犯您,但這是一個關於指針/實例在C ++中如何工作的非常基本的問題。 如果您在閱讀有關C ++的語言之前通過編寫和嘗試代碼來學習C ++,那么請考慮花一些時間來閱讀。

原因是C ++是一種通過實驗學習的可怕語言,主要有兩個原因:

  1. 並非所有事情都是合乎邏輯的。 許多C ++規則是語言和委員會決策演變的結果。 解決問題的最明顯答案通常不是C ++中的正確​​答案。 了解該語言的唯一方法是閱讀它。

  2. 語言的主要哲學是程序員永遠不會犯錯誤。 在其他語言中,當您犯錯時,“運行時錯誤天使”會停止程序並告訴您出了什么問題。 在C ++中,當您犯錯時,“未定義的行為守護程序”將獲得代碼的合法所有權,並會盡力使您遭受最大可能的損害,例如,使程序靜默運行一段時間,直到您決定之前展示給某人,然后僅將其崩潰。

混合1 + 2非常危險:語言很復雜,不會告訴您錯誤。 幫自己一個忙,先閱讀一個不錯的C ++書籍封面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM