Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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++_Arrays_Pointers - Fatal编程技术网

C++ 如何创建用于存储和返回浮点数组的结构?

C++ 如何创建用于存储和返回浮点数组的结构?,c++,arrays,pointers,C++,Arrays,Pointers,我想创建一个保存方形纹理纹理坐标的结构。结构应该只有一个静态成员,它是一个由8个浮点组成的常量数组,并且只有一个函数返回数组 我试过这个: struct TextureCoordinates { static constexpr GLfloat m_texturecoords[8] = { 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f,

我想创建一个保存方形纹理纹理坐标的结构。结构应该只有一个静态成员,它是一个由8个浮点组成的常量数组,并且只有一个函数返回数组

我试过这个:

struct TextureCoordinates
{
    static constexpr GLfloat m_texturecoords[8] = {
            1.0f, 0.0f,
            1.0f, 1.0f,
            0.0f, 1.0f,
            0.0f, 0.0f,
    };

    GLfloat* const gettexcoords() { return &m_texturecoords; }
};

但是我得到一个错误,返回类型与函数类型不匹配。如何更改此结构以使其以内存高效的方式工作?

GLfloat*const
表示GLfloat指针是常量,即指针不是它指向的值是常量。发件人:

从右到左读取指针声明

常数X*p表示“p指向一个常数X”:X对象不能 可通过p

X*const p表示“p是指向X的常量指针 is non const”:您不能更改指针p本身,但可以 通过p更改X对象

常数X*常数p表示“p是常数” 指向常数X的指针“:不能更改指针p本身, 也不能通过p更改X对象

您需要返回
常量GLfloat*
。由于该方法不属于特定对象,因此可以是静态的

static const GLfloat* gettexcoords() { return m_texturecoords; }

演示:。

谢谢杨!我还必须将返回值更改为
&m_texturecoords[0]
,这会导致任何问题吗?我编辑了答案。您只需返回
m_texturecoords
。数组名自动成为指针。还请注意,此解决方案还使方法常量,这意味着它可以在const qualified
TextureCoordinates
InstanceMethod上调用。它甚至可以是
static
。为什么只有
static
成员的
struct
?可能重复@LightnessRacesInOrbit,我希望数据可以从任何地方访问,只存储一次,并且是常量。这是我唯一能想到的办法。你知道我应该用什么更好的方法来实现吗?@ViktorAxén只需在名称空间范围内声明它,即全局?这个类有什么好处?@LightnessRacesInOrbit我不知道,在名称空间中声明它似乎更好,不知道为什么我认为它必须属于一个类或结构。