2014-12-18 59 views
0
struct Color { 
    int red; 
    int green; 
    int blue; 
    Color(int nred, int ngree, int nblue):red(nred),green(ngree),blue(nblue){ 
    } 
}; 

struct Cal { 
    int days; 
    Color color; 
    Cal(): days(), color(255,255,255){ 
    } 
}; 
int main() { 
    Cal go; 
    go.color(100,100,100); 
    return 0; 
} 

問題是什麼?編譯器是否認爲color是函數而不是構造函數?如何解決這個問題?術語不評估爲取3個參數的函數

+0

你寫'go.color(100,100,100);'因爲你要構建的顏色與100,100,100,而不是255 ,255,255? – kec 2014-12-18 23:23:19

+0

錯誤與調用'(Color)(int,int,int)'不匹配。 – bobtheboy 2014-12-18 23:23:51

回答

4

是的,它認爲color是一個函數,而不是一個構造函數。

該對象已經構建,並且調用構造函數爲時已晚。

選項1

構造函數添加到Cal,可以採取的色彩值,並進行轉發:

struct Cal { 
    int days; 
    Color color; 
    Cal(): days(), color(255,255,255){ 
    } 
    Cal(int nred, int ngree, int nblue): days(), color(nread,ngree,nblue){ 
    } 
}; 
int main() { 
    Cal go(100,100,100); 
    return 0; 
} 

選項2個

手動設置的值:

int main() { 
    Cal go; 
    go.color.red = go.color.green = go.color.blue = 100; 
    return 0; 
} 

選項3

從一個臨時的實例分配color成員:

int main() { 
    Cal go; 
    go.color = Color(100, 100, 100); 
    return 0; 
} 
+0

對於選項1,爲什麼沒有一個構造函數的所有三個值默認爲'255'? – 0x499602D2 2014-12-18 23:25:57

+1

我想給選項3作爲答案,但發現編輯和添加它更容易。 – 2014-12-18 23:31:57

+0

@πάνταῥεῖ,應該是「顏色(100,100,100)」以符合OP的意圖。 – 2014-12-18 23:32:49