术语不评估为采用3个参数的函数

时间:2014-12-18 23:20:57

标签: c++

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是函数而不是构造函数?怎么解决这个?

1 个答案:

答案 0 :(得分: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;
}