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

时间:2017-01-18 12:16:48

标签: 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}},
    };
}

编译完成后,我得到Error:(12, 13) unexpected type name 'IndicatorVertex': expected expression

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

1 个答案:

答案 0 :(得分:4)

你不能像你一样创建动态数组,你需要定义一个像

这样的实际数组
IndicatorVertex vertices[] = { ... };

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

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

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

IndicatorVertex* vertices = vertices1;

// ...

vertices = vertices2;