【问题标题】:Can't assign C++ array无法分配 C++ 数组
【发布时间】:2020-06-23 01:37:37
【问题描述】:

上下文:需要将TestTextures3SpriteObj s1中的verts设置到verts1数组中。给我一个错误“表达式必须是可修改的左值”。复制完成后,顶点将作为缓冲区数据发送到 GPU,使用 OpenGL 和 GLUT。

仅包含相关的代码摘录

#pragma once
    class TestTextures3SpriteObj
    {
    public:
        int spriteid;
        int vao;
        int texid;
        float verts[];
    };
    
    const float verts1[] = { 0.5 ,0.5, 0.0, 0.9, 0.5, 0.3, 0.0, 1.0, 0.0,
                            0.5, -0.5, 0.0, 0.3, 0.3, 0.9, 1.0, 1.0, 1.0,
                            -0.5, -0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0,
                            -0.5, 0.5, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
    
    TestTextures3SpriteObj s1;
    
    s1.verts = verts1;

【问题讨论】:

  • 不,您不能分配 c 数组,但可以分配 c++ 数组。 std::array 是可赋值的。
  • float verts[]; 不合法c++
  • 警告:float verts[]; 看起来是 flexible array member。 C++ 中的非标准。
  • 您可能需要打开更多警告,以便您的编译器通知您这些事情。
  • 仅仅因为它编译并不意味着它是一个好主意。标准 C++ 要求数组具有编译时常量大小。远离非标准可变长度数组扩展的原因有很多。

标签: c++ arrays pointers


【解决方案1】:

其实你并没有访问变量...

如果要访问单个元素,请使用索引

s1.verts1[0]

如果你想复制使用std::copy

std::copy(verts1, verts1 + 36, s1.verts);

【讨论】:

    【解决方案2】:
    #include <iostream>
    using namespace std;
    
    class TestTextures3SpriteObj
        {
        public:
            int spriteid;
            int vao;
            int texid;
            float verts[36]; //assign the size to the array
        };
        
        const float verts1[] = { 0.5 ,0.5, 0.0, 0.9, 0.5, 0.3, 0.0, 1.0, 0.0,
                                0.5, -0.5, 0.0, 0.3, 0.3, 0.9, 1.0, 1.0, 1.0,
                                -0.5, -0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0,
                                -0.5, 0.5, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
    int main()
    {
        TestTextures3SpriteObj s1;
        int len=sizeof(verts1)/sizeof(verts1[0]);
        //copies the entire array to the object with member verts
        std::copy(verts1, verts1 + 36, s1.verts);
        //printing the values in the s1 object
        for(int i=0;i<len;i++)
        {
            cout<<s1.verts[i]<<" ";
        }
    }
    

    为类中的数组分配大小,然后执行 std::copy 以复制 verts 数组中的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-13
      • 2017-01-26
      • 1970-01-01
      • 2013-11-15
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多