回 帖 发 新 帖 刷新版面

主题:使用类的组合,编译通过,但Link出现error???

我在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个回复)

沙发

现在问题已经解决,是这样:

一般定义类时,在h文件中写类的声明部分,在cpp文件中写成员函数的实现部分.
我定义类A时没有这样做,而是将其所有函数的函数体写在了类声明部分的后面,就造成了上面的错误.
现在我将它分成h和cpp两个文件,就没有错误了.
这可真怪,搞不懂为什么要这样??

板凳

因为这两个类是 带有相互嵌套的关系,将两个类的定义放在同一.h中可以解决这个问题.当然也可以这样做:


head1.h:

class A;
class B
{
};


head2.h:


class B;
class A
{
};

 这样也行,:).至于为什么,自己仔细体会一下

3 楼

你采用了预先声明的方法.没想到还可以这样做.
我一贯的做法是:如果代码中用到了某个类,就把那个类的.h声明文件包含到本代码中.
不会包含头文件后,再将类预先声明一下.

4 楼

寻找一直寻找机会的人!
一个趋势中的趋势的项目!
一个直销和传销终结者的项目!
一个帮助普通创业者成功的项目!
   我们在互联网上正在拓展一个生意项目,现在正在寻求合作伙伴。我们认为成功的关键是你是什么人?还有你和谁在一起。我们在乎的是--您是否是有激情、有梦想的人。有意者请跟我们联系,我们和您谈谈,给您讲解一些生意概念,或许我们可以合作。一个集即时网游、交友,娱乐游戏,网络品牌代理商城,互联网平台项目招商进行中……详情QQ空间资料 http://user.qzone.qq.com/909065437/infocenter
网商咨询 摩客天宇QQ 909065437 

5 楼

北京法蕾雅竹元诚
空白市场 兆亿商机 第一批卖电脑的发了! 第一批卖手机的发了!! 第一批卖保暖内衣的也发了!!! 抢占先机 您将是第一批卖生态家纺竹纤维产品的人!!!! 法蕾雅生态家纺全国招商咨询QQ294355161 科技之光传访法蕾雅http://player.youku.com/player.php/sid/XMTc2MzY4MjQ0/v.swf

http://blog.sina.com.cn/s/blog_6ca0216a0100n7h9.html
法蕾雅竹纤维的神奇六大功效

我来回复

您尚未登录,请登录后再回复。点此登录或注册