| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1171 人关注过本帖
标题:C++程序,编译没有问题,连接时出错,这是怎么回事?
只看楼主 加入收藏
i80286
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:99
专家分:428
注 册:2013-9-30
收藏
得分:0 
回复 9楼 碧海苍梧
没错啊,一个主程序main,一个头文件.h,然后N个.CPP子程序,N个子程序和主程序都引用你写的头文件
2013-10-29 13:06
碧海苍梧
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-10-29
收藏
得分:0 
回复 10楼 blueskiner
但是我这个错误怎么解决啊?
2013-10-29 13:07
碧海苍梧
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-10-29
收藏
得分:0 
回复 11楼 i80286
编译的时候没有错误,但是连接的时候就有错误了
2013-10-29 13:09
i80286
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:99
专家分:428
注 册:2013-9-30
收藏
得分:0 
这是你定义的函数:
void inputVolumn(rectVolumn *rv)
void getVolumn(rectVolumn *rv)
这是你在主函数中引用的语句:
inputVolumn();
getVolumn();
错误你应该明白了吧?
2013-10-29 13:22
碧海苍梧
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-10-29
收藏
得分:0 
回复 14楼 i80286
我把定义改成
void inputVolumn()
void getVolumn()

连接时错误提示
Linking...
test.obj : error LNK2005: "struct rectVolumn * rv" (?rv@@3PAUrectVolumn@@A) already defined in rectvalum.obj
Debug/我的程序.exe : fatal error LNK1169: one or more multiply defined symbols found
执行 link.exe 时出错.

主函数引用改成
    inputVolumn(rectVolumn *rv);
    getVolumn(rectVolumn *rv);
编译的时候直接就出错了
test.cpp
E:\大三上学期\C++\实验二\我的2\我的程序\我的程序\test.cpp(18) : error C2275: 'rectVolumn' : illegal use of this type as an expression
        e:\大三上学期\c++\实验二\我的2\我的程序\我的程序\rectvalum.h(2) : see declaration of 'rectVolumn'
E:\大三上学期\C++\实验二\我的2\我的程序\我的程序\test.cpp(18) : error C2660: 'inputVolumn' : function does not take 1 parameters
E:\大三上学期\C++\实验二\我的2\我的程序\我的程序\test.cpp(19) : error C2275: 'rectVolumn' : illegal use of this type as an expression
        e:\大三上学期\c++\实验二\我的2\我的程序\我的程序\rectvalum.h(2) : see declaration of 'rectVolumn'
E:\大三上学期\C++\实验二\我的2\我的程序\我的程序\test.cpp(19) : error C2660: 'getVolumn' : function does not take 1 parameters
执行 cl.exe 时出错.
2013-10-29 13:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
既然老師要訓練你寫多模塊程序,應該有指導怎麽弄的。你先把程序寫在一個模塊中,調試通過之後再把需要分模塊的部分切割出去,很簡單的,不知道你老師沒具體指導你還是怎地。

授人以渔,不授人以鱼。
2013-10-29 13:35
i80286
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:99
专家分:428
注 册:2013-9-30
收藏
得分:10 
recevalum.cpp
 #include<iostream>
 using namespace std;

 struct rectVolumn
 {
     int length;
     int width;
     int height;
     int volumn;
 };
rectVolumn rv;

void inputVolumn()
 {
     cout<<"请输入长方体的长:";
     cin>>rv.length;
     cout<<"请输入长方体的宽:";
     cin>>rv.width;
     cout<<"请输入长方体的高:";
     cin>>rv.height;
 }

 void getVolumn()
 {
 cout<<"长方体的体积="<<rv.length*rv.width*rv.height<<endl;
}
2013-10-29 13:43
碧海苍梧
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-10-29
收藏
得分:0 
回复 16楼 TonyDeng
前两个放到一起的时候没有出错,第三个求长方体体单独放在一个文件中时也没有错,但是,把它和前两个合到一起,也就是我前面发的代码,这个时候就有错误了
2013-10-29 13:50
碧海苍梧
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-10-29
收藏
得分:0 
回复 17楼 i80286
可以了啊,您能告诉我这是怎么回事吗?
2013-10-29 13:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
把要分割出去的函數搬到另一個.cpp模塊(這個模塊不需要原型聲明,但若.h中有數據類型定義或宏之類東西,就要#include後面的.h)中,然後把這些函數的原型聲明搬到另一個.h頭文件中,在原先的程序中#include這個.h,然後在project中把前面的.cpp引用起來,編譯即可。鏈接找不到函數的實現代碼,是因爲project中沒有要求鏈接對應的.cpp文件,那個才是頭的實現部分,.h是拿出去給外人看的清單,祇有.h是沒用的(很多人總說要.h之類,明顯就是不懂C/C++的多模塊編程是怎麽回事)。

授人以渔,不授人以鱼。
2013-10-29 13:59
快速回复:C++程序,编译没有问题,连接时出错,这是怎么回事?
数据加载中...
 
   



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

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