2014-12-18 32 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

相关问题