c++ - 结构的动态聚合初始化的正确形式?

标签 c++ c++11

我想做一些非常简单的事情,但我做错了。

头文件:

class Example
{
public:

    typedef struct
    {
        float Position[3];
        float Color[4];
        float TexCoord[2];
    } IndicatorVertex;

    void doSomething();
};

.cpp 文件:

void Example::doSomething()
{
    IndicatorVertex *vertices;

    vertices = IndicatorVertex[] {
        {{-1.0, 1.0, 1.0}, {1.0f, 1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}}
        {{1.0, 1.0, 1.0}, {1.0f, 1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}},
    };
}

编译后,我收到错误:(12, 13) 意外类型名称 'IndicatorVertex':预期表达式

(我故意不使用 std::vector 等;我故意在 c++11 设置中使用 C 功能。)

最佳答案

您不能像这样创建动态数组,您需要定义一个实际的数组,例如

IndicatorVertex vertices[] = { ... };

如果您稍后需要一个指针,请记住数组自然会衰减为指向其第一个元素的指针。因此,例如,如果您想要调用需要 IndicatorVertex* 参数的函数,只需传入 vertices ,它仍然会按预期工作。

如果您想拥有不同的数组并使vertices指向其中之一,那么您必须如上所示定义数组,并使vertices指向其中一个其中。喜欢

IndicatorVertex vertices1[] = { ... };
IndicatorVertex vertices2[] = { ... };
// ...

IndicatorVertex* vertices = vertices1;

// ...

vertices = vertices2;

关于c++ - 结构的动态聚合初始化的正确形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41719193/

相关文章:

c++ - 如何使用外部模板

c++ - 将 constexpr 字节数组与缓冲区的一部分(指向数据的指针)进行比较

c++ - PyTuple_Pack 接受可变数量的参数

python - 在嵌入式 PyQt 应用程序中使用 QThread

c++ - OpenCL 和 std::vector<bool> 不兼容

c++ - 在c++中的while条件表达式中自动声明变量

c++ - 如何获取 c++0x lambda 表达式的类型?

c++ - C++11 中的无锁多生产者/消费者队列

c++ - 如何将 std::chrono::time_point 转换为带有小数秒的日历日期时间字符串?

c++ - 为什么存在用户声明的析构函数时生成移动构造函数?