STL容器无法添加函数内定义的结构

Tom*_*Tom 1 c++

我已经提出了与此类似的代码的问题

void aFuncion()
{
    struct entry
    {
        std::string field1;
        int         field2;
        int         field3;

        entry(const entry& ent)
        { 
            // copy constructor code 
        }

        entry()
        { 
            // default constructor code 
        }

        entry(std::string s, int a, int b)
        { 
            field1 = s;
            field2 = a;
            field3 = b;
        }

    }; //end of structure definition 

    std::vector<entry> vec;
    entry en("a string", 1, 2);

    vec.push_back(en);  // vec has garbage in index 0
}
Run Code Online (Sandbox Code Playgroud)

将条目推入向量后,调试器仅显示向量第一个条目中的垃圾.

一旦我们从结构定义中取出了函数,问题就解决了.
为什么问题会发生怎么把定义变成函数解决了呢?

(我们正在使用VS 32 on XP 32 bit)

ava*_*kar 7

当前的C++标准不允许模板参数是本地定义的类型.这在即将推出的标准版本中得到了补救.

14.3.1/2:

本地类型,没有链接的类型,未命名的类型或从这些类型中的任何类型复合的类型不应该用作模板类型参数的模板参数.

  • 语言扩展的一般无用性的一个很好的例证! (3认同)