1

问题:为什么visual c++17不允许匿名类的匿名对象?

允许匿名对象(我认为在这种情况下这只是暂时的?):

class Foo
{
public:
    virtual int bar() = 0;
};

int main()
{
    class ConcreteFoo : public Foo
    {
    public:
        int bar() override
        {
            //some operation
        }
    };
    ConcreteFoo{}.bar();
    return 0;
}

允许匿名类:

int main()
{
    class : public Foo
    {
    public:
        int bar() override
        {
            //some operation
        }
    } myFoo;
    myFoo.bar();
    return 0;
}

两者一起是不允许的:

int main()
{
    class : public Foo
    {
    public:
        int bar() override
        {
            //some operation
        }
    }{}.bar();
    return 0;
}

为什么不?我正在使用视觉 c++17

错误是:

1>c:\users\peter\downloads\nationsgamemockup\nationsgamemockup\nationsgamemockup.cpp(37): warning C4094: untagged 'class' declared no symbols
1>c:\users\peter\downloads\nationsgamemockup\nationsgamemockup\nationsgamemockup.cpp(37): error C2143: syntax error: missing ';' before '{'
1>c:\users\peter\downloads\nationsgamemockup\nationsgamemockup\nationsgamemockup.cpp(37): error C2059: syntax error: '.'
4

0 回答 0