2009-09-26 331 views
2

我剛碰到一個尷尬的問題,有一個簡單的修復,但不是我喜歡做的一個。在我的類的構造函數中,我正在初始化數據成員的數據成員。下面是一些代碼:成員初始化數據結構的成員

class Button { 
private: 
    // The attributes of the button 
    SDL_Rect box; 

    // The part of the button sprite sheet that will be shown 
    SDL_Rect* clip; 

public: 
    // Initialize the variables 
    explicit Button(const int x, const int y, const int w, const int h) 
     : box.x(x), box.y(y), box.w(w), box.h(h), clip(&clips[CLIP_MOUSEOUT]) {} 

但是,我得到一個編譯錯誤說:

C:\Users\Alex\C++\LearnSDL\mouseEvents.cpp|56|error: expected `(' before '.' token| 

C:\Users\Alex\C++\LearnSDL\mouseEvents.cpp|56|error: expected `{' before '.' token| 

有沒有以這種方式初始化成員一個問題,我需要切換到構造函數體中的賦值?

回答

5

您只能在initialization list中調用您的成員變量構造函數。因此,如果SDL_Rect沒有接受x, y, w, hconstructor,則必須在構造函數的主體中執行此操作。

+6

或者寫一個幫助函數,它接受這4個參數並返回一個'SDL_Rect'。然後你可以在初始化列表中調用它。 – jalf 2009-09-26 10:45:58

3

當St不在你的控制範圍內時,以下是有用的,因此你不能寫出正確的構造函數。

struct St 
{ 
    int x; 
    int y; 
}; 

const St init = {1, 2}; 

class C 
{ 
public: 
    C() : s(init) {} 

    St s; 
};