extern可以声明一个变量而不定义它,extern可以声明一个类吗?

wesleyluo 2009-03-10 02:20:07
在我的C++程序中,所有的类都要写在main()函数的前面,否则无法识别?

所以我想问下,我可以用extern声明一个类吗?

然后我就在main()函数的后面定义他们。 不知道可以不?
...全文
1144 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2011-10-25
  • 打赏
  • 举报
回复
mark,学到了不少知识
yangangs 2009-03-24
  • 打赏
  • 举报
回复
学习
慢两拍 2009-03-24
  • 打赏
  • 举报
回复
顶..学习
勉励前行 2009-03-19
  • 打赏
  • 举报
回复
class B; //聲明B 是一個類名稱。
A::Test(){
B b; // 這樣不行, B *b ;定義為指針就可以。
b.Test(); //沒有對應頭文件,是無法調用該類的方法或成員的。
}

在不包括對應頭文件的情況下,聲明一個類,然後可以定義指向該類的指針。卻不能定義該類的實例。

該方式一般用來用來解決兩個類相互交叉引用的問題。即A中有B,B中有A的問題,聲明一個類名稱,就解決了編譯時是先有雞或是先有蛋的問題。

同時也用來處理頭文件交叉引用的問題,在頭文件中聲明該類,在CPP文件中include "對應頭文件" 這樣可以避免頭文件交叉引用的問題,從而加快編譯速度。
laowang2 2009-03-15
  • 打赏
  • 举报
回复
声明还是放到main函数前面吧。
sding 2009-03-12
  • 打赏
  • 举报
回复
int main(int argc, char* argv[])
{
extern int cc;
extern MyFirst aa;//????
MyFirst a;//???MyFirst
a.Show_Message();

return 0;
}
这样就可以了
hemiya 2009-03-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wesleyluo 的回复:]
我的代码是这样的:怎么不可以???

C/C++ code
int main(int argc, char* argv[])
{
extern cc;
extern CLASSNAME MyFirst;//这里声明
MyFirst a;//不识别MyFirst
a.Show_Message();
cin >> b ;

[/Quote]
声明一个类是
class MyFirst;
你这段代码只能把MyFirst类的定义放到main前面.
因为需要生成MyFirst的实例a,MyFirst如果未定义只是声明,编译器也不知道如何给MyFirst的实例a分配空间啊.
但是你要只是定义一个MyFirst的指针是可以的,但是仅仅是指针不能有其它动作.


int main(int argc, char* argv[])
{
extern cc;
class MyFirst;//这里声明
MyFirst *a;
//a.Show_Message(); //不可以
cin >> b ;
return 0;
}


wesleyluo 2009-03-11
  • 打赏
  • 举报
回复
好像有点懂了。我把定义一个类型,和定义声明一个变量搞混了。
BORLANDSUN 2009-03-11
  • 打赏
  • 举报
回复
类的"定义"正确的名字应该叫做类的实现,楼主概念有问题,应该仔细体会下"变量的声明与定义"和"类的声明与实现"这两句话中的含义.
僵哥 2009-03-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gyj_china 的回复:]
答案是可以的
extren CLASSNAME cx;
这个声明其实跟
extren int ix;是一样的,告诉编译器不要再给这对象分配空间,前提是该对像在其它地方已经定义了,并且包含在指定头文件中.
[/Quote]
这声明的不是一个类,而是一个变量
wesleyluo 2009-03-11
  • 打赏
  • 举报
回复
顶起来让大家再帮我瞧瞧啊。
yc_8301 2009-03-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 unsigned 的回复:]
引用 2 楼 gyj_china 的回复:
答案是可以的
extren CLASSNAME cx;
这个声明其实跟
extren int ix;是一样的,告诉编译器不要再给这对象分配空间,前提是该对像在其它地方已经定义了,并且包含在指定头文件中.

这声明的不是一个类,而是一个变量
[/Quote]
顶僵哥,上面是声明变量,而非一个类,如果想声明一个类,在标准C++中可以使用 class 类名 这种方式,如下:

class B;
A::Test(){
B b;
b.Test();
}

这样就可以使用 B类 了。。
wesleyluo 2009-03-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gyj_china 的回复:]
答案是可以的
extren CLASSNAME cx;
这个声明其实跟
extren int ix;是一样的,告诉编译器不要再给这对象分配空间,前提是该对像在其它地方已经定义了,并且包含在指定头文件中.
[/Quote]
我的代码是这样的:怎么不可以???

int main(int argc, char* argv[])
{
extern cc;
extern CLASSNAME MyFirst;//这里声明
MyFirst a;//不识别MyFirst
a.Show_Message();
cin >> b ;
return 0;
}
//-------------------------------------------------------
int cc=10;
class MyFirst//这里定义
{
private:
string str1;
public:
MyFirst();
~MyFirst();
void Show_Message();
};
MyFirst::MyFirst()
{
str1="aaa";
cout << "MyFirst Class" << endl;
}
MyFirst::~MyFirst()
{
}
void MyFirst::Show_Message()
{
cout << str1 << endl;
}


gyj_china 2009-03-10
  • 打赏
  • 举报
回复
补充一下,该声明必须放使用该类的前面就可以了
gyj_china 2009-03-10
  • 打赏
  • 举报
回复
答案是可以的
extren CLASSNAME cx;
这个声明其实跟
extren int ix;是一样的,告诉编译器不要再给这对象分配空间,前提是该对像在其它地方已经定义了,并且包含在指定头文件中.
ydlchina 2009-03-10
  • 打赏
  • 举报
回复
能否行,测试不就知道
可以以将声明与定义分别放在头文件与源文件中,使用时包含头文件即可,根本就不用全和main在一个文件中,和使用标准文件一样

函数当然可以在main后,只要将它的声明放在main前即可

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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