在 C++ 转换函数中返回一个数组
Returning an array in c++ conversion function
我正在尝试使用 OpenGL 学习 C++。 OpenGL 在 x 轴和 y 轴上从 -1 到 1 的坐标系上进行渲染。我正在尝试制作一个将像素转换为 openGL 坐标的函数。我有这个代码:
float pixelsToCoordinates(int pixels[2]) {
float r[2] = { (pixels[0] - windowWidth / 2) / (windowWidth / 2) * windowWidth / windowHeight, (pixels[1] - windowHeight / 2) / (windowHeight / 2) };
return r;
}
我在 cpp return r;
上收到此错误:
严重性代码说明项目文件行抑制状态
错误(主动)E0120 return 值类型与函数类型不匹配 OpenGL-Engine
我认为这与数组在 C++ 中的工作方式有关。这是什么问题?提前致谢。
return 类型中的第一个表达式
return r;
由于数组指示符隐式转换为指向其第一个元素的指针,因此具有类型 float *
。
另一方面。 return 函数的类型是 float
.
因此编译器发出错误消息,因为没有从指针类型 float *
到类型 float
的隐式转换。
但是如果你愿意,将函数的 return 类型从 float
更改为 float *
会有另一个问题 returning 一个指向本地的指针退出函数后不会存活的数组
由于您的数组仅包含两个元素,因此您可以 return 类型为 std::pair<float, float>
的对象,而不是尝试 return 数组。
例如
#include <utility>
//...
std::pair<float, float> pixelsToCoordinates( const int pixels[] ) {
return { (pixels[0] - windowWidth / 2.0f) / (windowWidth / 2.0f) * windowWidth / windowHeight, (pixels[1] - windowHeight / 2.0f) / (windowHeight / 2.0f) };
}
另一种选择是 return 类型为 std::array<float, 2>
的对象。
#include <array>
//...
std::array<float, 2> pixelsToCoordinates( const int pixels[] ) {
return { (pixels[0] - windowWidth / 2.0f) / (windowWidth / 2.0f) * windowWidth / windowHeight, (pixels[1] - windowHeight / 2.0f) / (windowHeight / 2.0f) };
}
另一种选择是在函数的调用者中定义目标数组,并将其作为参数传递给函数。例如
float ( & pixelsToCoordinates( const int pixels[], float ( &a )[2] ) )[2];
注意,如果你想获取 float 类型的值,那么通常你应该使用 float 类型的表达式作为初始值设定项。
我正在尝试使用 OpenGL 学习 C++。 OpenGL 在 x 轴和 y 轴上从 -1 到 1 的坐标系上进行渲染。我正在尝试制作一个将像素转换为 openGL 坐标的函数。我有这个代码:
float pixelsToCoordinates(int pixels[2]) {
float r[2] = { (pixels[0] - windowWidth / 2) / (windowWidth / 2) * windowWidth / windowHeight, (pixels[1] - windowHeight / 2) / (windowHeight / 2) };
return r;
}
我在 cpp return r;
上收到此错误:
严重性代码说明项目文件行抑制状态 错误(主动)E0120 return 值类型与函数类型不匹配 OpenGL-Engine
我认为这与数组在 C++ 中的工作方式有关。这是什么问题?提前致谢。
return 类型中的第一个表达式
return r;
由于数组指示符隐式转换为指向其第一个元素的指针,因此具有类型 float *
。
另一方面。 return 函数的类型是 float
.
因此编译器发出错误消息,因为没有从指针类型 float *
到类型 float
的隐式转换。
但是如果你愿意,将函数的 return 类型从 float
更改为 float *
会有另一个问题 returning 一个指向本地的指针退出函数后不会存活的数组
由于您的数组仅包含两个元素,因此您可以 return 类型为 std::pair<float, float>
的对象,而不是尝试 return 数组。
例如
#include <utility>
//...
std::pair<float, float> pixelsToCoordinates( const int pixels[] ) {
return { (pixels[0] - windowWidth / 2.0f) / (windowWidth / 2.0f) * windowWidth / windowHeight, (pixels[1] - windowHeight / 2.0f) / (windowHeight / 2.0f) };
}
另一种选择是 return 类型为 std::array<float, 2>
的对象。
#include <array>
//...
std::array<float, 2> pixelsToCoordinates( const int pixels[] ) {
return { (pixels[0] - windowWidth / 2.0f) / (windowWidth / 2.0f) * windowWidth / windowHeight, (pixels[1] - windowHeight / 2.0f) / (windowHeight / 2.0f) };
}
另一种选择是在函数的调用者中定义目标数组,并将其作为参数传递给函数。例如
float ( & pixelsToCoordinates( const int pixels[], float ( &a )[2] ) )[2];
注意,如果你想获取 float 类型的值,那么通常你应该使用 float 类型的表达式作为初始值设定项。