namespace chk{

class Car;
        Car abc()
        {
                return Car();
        }

class Car
{
        private:
                int sides;

        public:
                Car()
                {
                        std::cout<<"\ndefault called constructor";
                }
                Car(int nsides)
                {
                        std::cout<<"\ncalled constructor";
                        sides=nsides;
                }

                ~Car()
                {

                        std::cout<<"\nDeleting objext";
                }

};

       /* Car abc()
        {
                return Car();
        }*/
}

我收到上述代码的以下错误:-
check.cpp: In function ‘chk::Car chk::abc()’:
check.cpp:25: error: return type ‘struct chk::Car’ is incomplete
check.cpp:27: error: invalid use of incomplete type ‘struct chk::Car’
check.cpp:24: error: forward declaration of ‘struct chk::Car’

现在,当取消注释下面的abc()并注释上面的abc()时,它可以正常工作。
为什么C++不允许我在 namespace 内转发声明类?

最佳答案



C++不允许的是具有以下功能

Car abc()
{
    return Car();
}

没有Car类的定义。这是必需的,因为a)需要Car对象的大小,并且b)调用了该类的默认构造函数。没有类定义,就无法知道构造函数是否存在。

关于c++ - 在 namespace 中向前声明类,引发编译器错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17253761/

10-13 08:00