不能在函数内宣言却不定义类

不能在函数内声明却不定义类
本帖最后由 xiacanni 于 2014-03-10 18:28:24 编辑
如下代码会报错说“.....使用未定义的 class......”
class Car
{
public:
Car(int i){a=i;}
int a;
};
int func(int i)
{
return 0;
}
int main() 
{
class Car;
func(1);
Car c1(1);  
}


为什么允许在函数中声明但不定义函数,却不允许在函数中声明类呢?
这个问题也许和:“允许在函数中定义类,却不允许在函数中定义函数。”差不多。

为什么会这样设计C++?C++关于这一现象的说法是怎样的?
------解决方案--------------------
int main()
{
class Car;
}

这样不报错。但我不知道在函数内光声明类有何用?这样也似乎屏蔽了全局的类名。

------解决方案--------------------
这是一个防止命名冲突的机制,如果在语块内部出现了语块外部定义过的名字,就会在该语块执行时隐藏外部名字。否则,会因为在一个程序中起n多不同的名字而让程序员苦恼。
------解决方案--------------------

int main()
{
  class Car{};
  Car car; 
  return 0;
}


楼主你认为这个有错吗?
------解决方案--------------------
不允许在函数中定义函数是为了不让C++的世界变得更加混乱吧。
------解决方案--------------------
声明类就会屏蔽全局的类名。但是声明函数不会屏蔽全局的函数。

后半句谁说的?
------解决方案--------------------
只是被函数内的类屏蔽了而已,如果函数内的类也有符合的构造函数就不会报错了
------解决方案--------------------
不会把,应该不可以在函数体内声明一个类吧。