在旧的c ++(<c ++ 11)中,初始化struct会出错

Joo*_*. P 1 c++ visual-studio-2010 glm-math

struct Material {
    glm::vec3 ambient;
    glm::vec3 diffuse;
    glm::vec3 specular;
    float shininess;
};

Material emerald{ { 0.0215f, 0.1745f, 0.0215f },{ 0.07568f, 0.61424f, 0.07568f },{ 0.633f, 0.727811f, 0.633f },0.6f };
Run Code Online (Sandbox Code Playgroud)

这在C++ 11中完全正常,但我无法弄清楚如何在C++ <C++ 11中解决这个问题.我出于某种原因迁移到VS2010,需要修复这些错误.

我得到的错误是:

looks like a function definition, but there is no formal parameter list; skipping apparent body
Run Code Online (Sandbox Code Playgroud)

先感谢您.

Pet*_*ter 5

glm::vec3(typedef对于一个类来说)有一个接受三个参数的构造函数,所以(在C++ 11之前)你不能对你的struct使用统一或聚合初始化.

要做你想做的,改变

Material emerald{ { 0.0215f, 0.1745f, 0.0215f },{ 0.07568f, 0.61424f, 0.07568f },{ 0.633f, 0.727811f, 0.633f },0.6f };
Run Code Online (Sandbox Code Playgroud)

Material emerald = { glm::vec3(0.0215f, 0.1745f, 0.0215f),
                  glm::vec3(0.07568f, 0.61424f, 0.07568f),
                  glm::vec3(0.633f, 0.727811f, 0.633f),
                  0.6f };
Run Code Online (Sandbox Code Playgroud)