Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;通行证;“违约”;结构到功能_C++ - Fatal编程技术网

C++ C++;通行证;“违约”;结构到功能

C++ C++;通行证;“违约”;结构到功能,c++,C++,我正试图弄清楚如何在不初始化结构的情况下将默认结构值“传递”给函数,这就是我现在所拥有的: struct Color3i { Color3i(): r(255), g(255), b(255) { } int r, g, b; }; void CCore::Color(Color3i color) { double red, green, blue; red = color.r / 255.0f; green = color.g / 255.0f;

我正试图弄清楚如何在不初始化结构的情况下将默认结构值“传递”给函数,这就是我现在所拥有的:

struct Color3i
{
    Color3i(): r(255), g(255), b(255) { }
    int r, g, b;
};

void CCore::Color(Color3i color)
{
    double red, green, blue;
    red = color.r / 255.0f;
    green = color.g / 255.0f;
    blue = color.b / 255.0f;

    glColor3f(red,green,blue);
}

Color3i defaultColor;
Core.Color(defaultColor);
我试图做的事情看起来是这样的,但这显然不起作用:

Core.Color(Color3i defaultColor);
如何在不使用Color3i defaultColor初始化的情况下将结构传递给函数;这可能吗


很抱歉,如果以前有人问过这个问题,但我尝试搜索互联网站,但找不到任何东西(可能我使用了错误的关键字进行搜索)

您应该可以这样做:

Core.Color(Color3i());

也就是说,调用默认构造函数来初始化一个新实例,并传递它。

有几种方法可以传递希望颜色为默认颜色的信息。注释中已经给出了最简单的一个:

Core.Color(Color3i())
如果希望代码更短,可以在调用的函数参数中设置默认值:

void CCore::Color(Color3i color = Color3i()) { ... }

....
Core.Color(); //no argument = default
如果希望更具描述性,可以在
颜色中创建一个静态函数作为构造函数:

struct Color3i {
    Color3i(): r(255), g(255), b(255) { }
    int r, g, b;
    static Colo3i defaultColor() { return Color3i(); }
};
...
Core.Color(Color3i::defaultColor());
最后,如果要控制可以使用默认颜色的上下文,可以创建新的虚拟枚举类型并重载函数以显式接受默认版本:

enum DefaultColorEnum {
    DefaultColor
};

void CCore::Color(Color3i color) {
    ... //normal code
}

void CCore::Color(DefaultColorEnum) { //ignore the parameter value, the type is what matters
    Color(Color3i()); //invoke the generic version with default value
}

...

Core.Color(DefaultColor);

这一切都取决于你真正想要实现什么…

这里有什么问题?看起来它应该做你想做的。你得到的
color.r
值是多少?我想你是在试图避免使用
Color3i defaultColor并将该变量传递给函数?您应该能够使用
Core.Color(Color3i())关于
red=color.r/255.0f
:分子是
int
,分母是a
float
,分配给类型a
double
。这不是一个直接的问题,但像这样的混合类型可以给你gyp。@Bathseba谢谢你的输入,我想知道我自己在这方面是否也有问题谢谢这正是我想要的。我在学校有C++课程,但我一直在自己的自由编程上。我们还没有接触到结构之类的东西。顺便说一句,用大写字母开头变量名是不好的:语言和编译器根本不在乎,但是其他读你代码的程序员会希望
Core
是一个类型名。谢谢你的提示。CCore是我的一个类,我在中将Core定义为CCore Core(Core在我的应用程序中处理渲染和输入)。我基本上一直在互联网上阅读文章,并与之同行,有时会感到困惑,因为有些文章推荐了一些东西,而另一些文章推荐了其他东西,但两者都产生了相同的结果。在互联网研究之后,我们的老师因为某些原因在我们的C++课程中引入了C语言,这使得我甚至在困惑中困惑,因为我想保持纯粹的C++,感谢详细的注释。我在学校里有C++,但还没走多远。我一直在做自己的编程在空闲时间。也许我在C++方面有些头晕,但我至少对它很感兴趣。