gpt4 book ai didi

c++ - 远近不一致

转载 作者:可可西里 更新时间:2023-11-01 13:28:03 25 4
gpt4 key购买 nike

我一直在检查并重构一些代码。我最终改变了一个函数:

void setPerspective(float nearP = 0.1f, float farP = 1000.0f);

void setPerspective(float near = 0.1f, float far = 1000.0f);

并开始出现许多奇怪的 'missing ;''missing )' 错误。

nearfar 似乎是windef.h 中的#defined。很公平;我会避免使用它们。

但后来我在另一个头文件中注意到:

void setPerspective(float fov, float aspect, float near, float far);

但我没有遇到任何麻烦。这两个头文件都有相同的#include...

知道为什么我在一个中遇到问题,而在另一个中却没有吗?它似乎不是默认参数。 #include 的某种任意排序是否可能导致一个头文件出现问题而不是另一个头文件?

最佳答案

标记 nearfar 可能在像这样的空 #define 中定义为 null

#define near
#define far

因此预处理器会将它们替换为 null - 它们会在编译器处理源代码之前消失。

第一个函数声明包括对参数的默认赋值

void setPerspective(float nearP = 0.1f, float farP = 1000.0f);

编译器正确地将 nearP 和 farP 解释为参数名称,并将 float 解释为类型。当您将 nearP 更改为 near 并将 farP 更改为 far 时,预处理器会将它们替换为 null 并且您有一个分配给 float 类型......编译器会抛出一个合适的......这是编译器看到的:

void setPerspective(float  = 0.1f, float  = 1000.0f);

在第二个头文件中,函数原型(prototype)中的参数没有默认赋值,编译器看到参数是float,看不到nearfar 因为它们是空的...所以而不是这个

void setPerspective(float fov, float aspect, float near, float far);

编译器看到了这个

void setPerspective(float fov, float aspect, float , float );

这是一个完全合法的函数原型(prototype)(您不必给参数名称)。

关于c++ - 远近不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12556835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com