请问dev-c++怎样编译多个文件?

sonic1984 2004-12-26 03:22:44
郁闷了好久的bc问题
...全文
559 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
sonic1984 2005-01-04
  • 打赏
  • 举报
回复
谢谢大家

不过能不能告诉我怎样散分?
fatalerror99 2004-12-31
  • 打赏
  • 举报
回复
C++ Primer 中对模板声明和定义的分开编译有比较详细的讨论,可以参考。

另外,你可以看看 STL 源码,各个版本中,模板的声明和定义都是在一个 .h 文件中的。
fatalerror99 2004-12-30
  • 打赏
  • 举报
回复
在编译器不支持 keyword export 的情况,你只能把声明和定义放在一个文件中。

支持模板声明和定义的分开编译(也就是实现 export)是一件非常复杂的事情,连 Bjarne Stroustrup 都承认这是一件代价非常昂贵的事情。

所以现在几乎所有编译器都没有实现 export 关键字,至少我没有见过。
sonic1984 2004-12-30
  • 打赏
  • 举报
回复
to fatalerror99(涅槃) :

我就是这个意思---声明和定义分别放在不同的文件中

dev-c++确实不支持keyword export..........
而且去掉export也不能通过编译
[Linker error] undefined reference to `void myswap<int>(int&, int&)'
sonic1984 2004-12-28
  • 打赏
  • 举报
回复
我看书上讲 应该把类的声明放在头文件中 类的成员函数的定义放在一个单独的文件中(非头文件)然后把这个文件和主程序文件一起编译 所以这个单独的文件不应该用include呀
sonic1984 2004-12-28
  • 打赏
  • 举报
回复
我的确建的一个工程啊

然后把a.cpp 和 main.cpp加进去的
intellifox 2004-12-28
  • 打赏
  • 举报
回复
DEV-C++确实有这个问题,一个方法就是每一个小改动都得rebuild all才行。这样很不方便,兄弟也郁闷中.......
fatalerror99 2004-12-28
  • 打赏
  • 举报
回复
根据 C++ 标准,也可以将文件分成如下3个文件。
但遗憾的是,VC 2003 和 Dev-C++ (GCC) 都没有实现 export 关键字,因此无法支持模板声明和定义分离,所以,一下代码没有通过编译检验,仅供参考。

//file1: a.h

template<typename a>
void myswap(a& x, a& y);

//file2: a.cpp

#include "a.h"

export template<typename a>
void myswap(a& x, a& y)
{
a t;
t=x; x=y; y=t;
}

//file3: main.cpp

#include <iostream>
#include "a.h"

using namespace std;

int main()
{
int a, b;
cin >> a, b;
myswap (a, b);
cout << a << " " << b;
system ("PAUSE");
return 0;
}
fatalerror99 2004-12-28
  • 打赏
  • 举报
回复
你的 main.cpp 和 a.cpp 没有关系,怎么能成功呢。

把 a.cpp 改为 a.h

然后,在 main.cpp 中加入 #include "a.h"。

这样做就没问题了。
cizi_nwu 2004-12-28
  • 打赏
  • 举报
回复
建个工程就好了……我刚用dev C++也出现这个问题!
quaiyan 2004-12-28
  • 打赏
  • 举报
回复
试了一下cin>>a,b;这条语句应该有问题.
cin>>a;
cin>>b;
fatalerror99 2004-12-28
  • 打赏
  • 举报
回复
你的 main.cpp 和 a.cpp 没有关系,怎么能成功呢。

把 a.cpp 改为 a.h

然后,在 main.cpp 中加入 #include "a.h"。
sonic1984 2004-12-27
  • 打赏
  • 举报
回复
//file1: a.cpp
#include<iostream>
template<typename a>
void myswap(a & x,a & y)
{
a t;
t=x; x=y; y=t;
}

//file2: main.cpp
#include <iostream>
using namespace std;

int main()
{
int a,b;
cin>>a,b;
myswap(a,b);
cout<<a<<" "<<b;
system("PAUSE");
return 0;
}

把两个文件添加到一个工程project1中

选complie & run时 main.cpp `myswap' undeclared (first use this function)
sonic1984 2004-12-27
  • 打赏
  • 举报
回复
用include还有什么意义呢?
crazyvv 2004-12-27
  • 打赏
  • 举报
回复
main.cpp里要
include"a"
fatalerror99 2004-12-26
  • 打赏
  • 举报
回复
贴出代码看看。
agaric 2004-12-26
  • 打赏
  • 举报
回复
还是要include啊
sonic1984 2004-12-26
  • 打赏
  • 举报
回复
不行啊

我建了一个工程 加了两个文件

一个中有个交换两个数的模版函数myswap

另一个文件调用这个函数

但是编译时还是说myswap undecleared. 但奇怪的是我在编写调用这个函数的语句时,系统出现提示。说明myswap已经被识别 但为什么编译不通过呢?
fatalerror99 2004-12-26
  • 打赏
  • 举报
回复
建一个工程,把所有文件都加到工程里。
yegaofei 2004-12-26
  • 打赏
  • 举报
回复
建个工程吧

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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