QT_构造函数重载_重复定义问题

seayea 2005-01-11 10:04:38
写的一个程序,连接时出现类成员函数重复定义的错误。原因是我对这个类的构造函数进行了重载,
注释掉重载函数就正常。不得其解,求高手解答~
//
// info.h
class A
{

public:
A();
~A();
A(const A &a);
·//一些方法
·
·
private:
·//一些属性
·
·
};

· //方法的实现
·
·

// listitem.h
//
#include ···
#include “info.h”

class myListItem : public QListViewItem
{
public:
myListItem(QListViewItem * parent);
myListItem(QListViewItem * parent,const A &a);//加上这个构造函数就会出现类的重复定义
~myListItem();
·
·
·
private:
A info;
};

myListItem::myListItem(QListViewItem * parent,const A &a)
:QListViewItem(parent),info(a)
{
···
}

···


/////
因为我需要将ListViewItem和一个自定义的类相关联,因此我从ListViewItem类派生一个myListItem类,其中加入一个自定义类的数据成员;因为初始化的需要,我重载派生类的构造函数。
现在的问题是,一旦我加入重载的构造函数(声明和定义),连接时就会出现myListItem类所有方法
的重复定义错误和info类的所有方法重复定义错误。而使用默认构造函数,无重载构造函数时则一切正常。是我的这个构造函数声明和实现有什么问题么? 还是info类定义有什么问题?

这两个h文件都是使用了#ifndef #define #endif来保证不会因为重复引用造成重复定义的。

...全文
769 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
seayea 2005-01-11
  • 打赏
  • 举报
回复
问题原因找到了。
#ifndef #define #endif机制能够保证不会重复引入头文件,这只能保证不会在编译时出现因为多次引入而导致重复定义。但不能保证连接时重复连接.o文件(大概是由于是自定义类,其对应的.o文件不被pro监控,make clean都不管~)。

在应用时,应该是使用forward declare和implement include来引入,使用declare include则会出现
在连接时重复定义。

大概是这样吧~

按照C++规则,对于派生类,和基类的函数有同名,则基类函数被隐藏;因此派生类不会管基类构造函数是否“写死”(反正派生类还是会调用基类构造函数的)。

上面的重载函数本身是没有问题的,但由于上述pro不管自定义类死活的原因,我make的时候没注意,所以造成一种加上重载函数就重复定义的假相~

这是我自己的理解,也不晓得对不对。不过问题解决了,还是值得庆贺的~

谢谢回复。欢迎讨论。
longenic 2005-01-11
  • 打赏
  • 举报
回复
可能是QT的控件类的构造函数已经写死了. 但你派生时, 构造函数不是默认的就会找不到默认的构造的函数.
你可以去看看源程序.

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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