主题:使用类的组合,编译通过,但Link出现error???
oil
[专家分:320] 发布于 2007-05-12 11:12:00
我在A.h中定义了类A,
在B.h中定义了类B,使 A a;成为类B的成员变量.
然后在main.cpp中
#include "B.h"
B b;
编译通过,但Link时出现问题:
main.obj : error LNK2005: "public: __thiscall B::B(void)" already defined in B.OBJ
类B内的每个成员函数都有这样的error.
不知道是哪里出了问题,高手请帮忙!!
回复列表 (共5个回复)
沙发
oil [专家分:320] 发布于 2007-05-13 09:50:00
现在问题已经解决,是这样:
一般定义类时,在h文件中写类的声明部分,在cpp文件中写成员函数的实现部分.
我定义类A时没有这样做,而是将其所有函数的函数体写在了类声明部分的后面,就造成了上面的错误.
现在我将它分成h和cpp两个文件,就没有错误了.
这可真怪,搞不懂为什么要这样??
板凳
skybtone [专家分:160] 发布于 2007-05-14 17:43:00
因为这两个类是 带有相互嵌套的关系,将两个类的定义放在同一.h中可以解决这个问题.当然也可以这样做:
head1.h:
class A;
class B
{
};
head2.h:
class B;
class A
{
};
这样也行,:).至于为什么,自己仔细体会一下
3 楼
oil [专家分:320] 发布于 2007-05-20 09:34:00
你采用了预先声明的方法.没想到还可以这样做.
我一贯的做法是:如果代码中用到了某个类,就把那个类的.h声明文件包含到本代码中.
不会包含头文件后,再将类预先声明一下.
4 楼
moke5 [专家分:30] 发布于 2010-09-10 21:50:00
寻找一直寻找机会的人!
一个趋势中的趋势的项目!
一个直销和传销终结者的项目!
一个帮助普通创业者成功的项目!
我们在互联网上正在拓展一个生意项目,现在正在寻求合作伙伴。我们认为成功的关键是你是什么人?还有你和谁在一起。我们在乎的是--您是否是有激情、有梦想的人。有意者请跟我们联系,我们和您谈谈,给您讲解一些生意概念,或许我们可以合作。一个集即时网游、交友,娱乐游戏,网络品牌代理商城,互联网平台项目招商进行中……详情QQ空间资料 http://user.qzone.qq.com/909065437/infocenter
网商咨询 摩客天宇QQ 909065437
5 楼
法蕾雅竹纤维 [专家分:0] 发布于 2010-10-31 10:09:00
北京法蕾雅竹元诚
空白市场 兆亿商机 第一批卖电脑的发了! 第一批卖手机的发了!! 第一批卖保暖内衣的也发了!!! 抢占先机 您将是第一批卖生态家纺竹纤维产品的人!!!! 法蕾雅生态家纺全国招商咨询QQ294355161 科技之光传访法蕾雅http://player.youku.com/player.php/sid/XMTc2MzY4MjQ0/v.swf
http://blog.sina.com.cn/s/blog_6ca0216a0100n7h9.html
法蕾雅竹纤维的神奇六大功效
我来回复