| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 578 人关注过本帖
标题:c++中各种文件之间的包含与组织
只看楼主 加入收藏
specilize
Rank: 4
等 级:业余侠客
帖 子:126
专家分:247
注 册:2011-2-20
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:8 
c++中各种文件之间的包含与组织
Query_base是抽象基类,WordQuery,NotQuery和BinaryQuery继承Query_base类,BinaryQuery也是抽象类,AndQuery和OrQuery继承BinaryQuery类,Query是句柄指针类。Query类重载&,~,|,他们分别需要访问AndQuery,OrQuery,NotQuery,在Query中已经分别将要重载的函数设为友元,因为要返回派生类,所以在派生类定义后才能实现重载函数,
要实现的操作为比如:
Query operator&(const Query& first,const Query& second)
{  return new AndQuery(first,second);}//这里以用复制构造函数将类的指针                                       // 转化为Query对象
以下是我的文件组织形式

Query.h中用#include "Query_base.h"

Query_base.h 不用包含

WordQuery.h中
#include "Query_base.h"
#include "Query.h"
class WordQuery:public Query_base{....}
Query::Query(const string& s)
{ return new WordQuery(s);}

NotQuery.h中
#include "Query_base.h"
#include "Query.h"
class NotQuery::public Query_base{....}
Query operator~(const Query& query)
{  return new NotQuery(query);}

BinaryQuery.h中
#include "Query_base.h"

AndQuery.h中
#include "BinaryQuery.h"
#include "Query.h"
class AndQuery:public BinaryQuery{...}
Query operator&(const Query& first,const Query& second)
{  return new AndQuery(first,second);}

OrQuery.h中
#include "BinaryQuery.h"
#include "OrQuery.h"
class OrQuery:public BinaryQuery{....}
Query operator|(const Query& first,const Query& second)
{  return new OrQuery(first,second);}

然后编译链接时提示的错误为
[Linker error] undefined reference to `Query::Query(std::string const&)'  [Linker error] undefined reference to `Query::Query(std::string const&)'
[Linker error] undefined reference to `Query::Query(std::string const&)'
[Linker error] undefined reference to `operator&(Query const&, Query const&)'
[Linker error] undefined reference to `Query::Query(std::string const&)'
[Linker error] undefined reference to `Query::Query(std::string const&)'
[Linker error] undefined reference to `Query::Query(std::string const&)'
[Linker error] undefined reference to `operator&(Query const&, Query const&)'
[Linker error] undefined reference to `operator|(Query const&, Query const&)'
求高手帮我解释下原因,如何解决,详细点,谢谢
可以的话顺便给点编译链接的资料
搜索更多相关主题的帖子: return 
2011-04-23 00:15
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:4 
你用什么方法编译的?
2011-04-23 00:39
specilize
Rank: 4
等 级:业余侠客
帖 子:126
专家分:247
注 册:2011-2-20
收藏
得分:0 
回复 2楼 pangding
全部编译链接
2011-04-23 06:50
specilize
Rank: 4
等 级:业余侠客
帖 子:126
专家分:247
注 册:2011-2-20
收藏
得分:0 
写错了
WordQuery.h中
Query::Query(const string& s)
{ return new WordQuery(s);}
改为Query::Query(const string& s):q(new WordQuery(s)),use(new size_t(1)) { }
2011-04-23 07:04
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
你用的是 vc 吗?
2011-04-23 09:56
specilize
Rank: 4
等 级:业余侠客
帖 子:126
专家分:247
注 册:2011-2-20
收藏
得分:0 
回复 5楼 pangding
Dev c++
2011-04-23 11:02
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
不清楚。一般这种 IDE,不怎么需要用户管编译链接这些东西呀。

才发现你的文件怎么都是 .h 呀。习惯上有一个 .h 就行了。
2011-04-23 12:34
specilize
Rank: 4
等 级:业余侠客
帖 子:126
专家分:247
注 册:2011-2-20
收藏
得分:0 
回复 7楼 pangding
难道类比较多时也只有一个.h文件吗,是不是习惯上将基类和派生类放在头一个头文件声明,我看答案都是这么做的
2011-04-23 17:57
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
哦。我开始还以为你是每个函数一个 .h 呢。

你这就自己试试呗,我看挺容易的,就是个演示程序。本身就是练語法之类的。
2011-04-24 00:59
快速回复:c++中各种文件之间的包含与组织
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018934 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved