我的类在main()函数后定义的话,如何提前声明呢?就象提前声明函数一样?

bjwqt 2009-09-17 07:49:22
我的类在main()函数后定义的话,如何提前声明呢?就象提前声明函数一样?

#include <iostream>
using namespace std;

int main()
{
class Student; //这样声明为何报错呢?
Student s1;
s1.set();
s1.out();
return 0;
}


class Student
{
public:
void out()
{
cout << "num is: " << num << endl;

}
void set()
{
num=88;
}
private:
int num;
};
...全文
308 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
失落的凡凡 2009-09-17
  • 打赏
  • 举报
回复
把类的定义写到.h里面  然后在用到这个类的地方#include就可以了
cphj 2009-09-17
  • 打赏
  • 举报
回复
类的前置声明最多只能这样

class Student;

int main()
{
Student * s1;
return 0;
}

class Student
{
public:
void out()
{
cout << "num is: " << num << endl;

}
void set()
{
num=88;
}
private:
int num;
};


因为类的指针分配空间不需要了解类的大小
而定义类的对象,编译器需要根据类的大小压栈,所以必须知道大小
另外在类定义之前也不能调用函数,因为编译器还不知道类有哪些函数

类的前置定义通常的应用场景是,某些类指针是在运行期建立对象,所以不需要知道类的具体定义,这样可以实现某些设计模式
ws_yqr 2009-09-17
  • 打赏
  • 举报
回复
声明的时候不会报错,但s1.set()既然用到了这个类,内存就会为s1分配空间,但是Student的定义在使用点之后,系统无法获得Student的大小,无法分配内存,所以就要报错(可以看看类的名字查找机制)
xiaocai0001 2009-09-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bjwqt 的回复:]
类的定义必须保证要在使用它的函数之前吗?

[/Quote]

看看#include的位置就明白了.
kouwenlong 2009-09-17
  • 打赏
  • 举报
回复
类一般写在主函数的前面,就是提前声明了.
至于提前声明,我还没用过,一般都是写在前面.
bjwqt 2009-09-17
  • 打赏
  • 举报
回复
类的定义必须保证要在使用它的函数之前吗?

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧