gpt4 book ai didi

c++ - 在命名空间中转发声明类抛出编译器错误

转载 作者:行者123 更新时间:2023-11-28 03:14:46 25 4
gpt4 key购买 nike

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++ 不允许我在命名空间内转发声明类?

最佳答案

Why c++ is not allowing me to forward declare class inside namespace?

C++不允许的是有这样的函数

Car abc()
{
return Car();
}

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

关于c++ - 在命名空间中转发声明类抛出编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17253761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com