C_and_CPP 板


LINE

※ 引述《FiveAaaa ([5A]aaa￾  N  I》之铭言: : 推 FiveAaaa:我检查过了...都没有名称上的错误 11/02 15:45 : 推 LPH66:参数型态和回传形态以及函式大小写都要一样... 11/02 15:52 : 推 FiveAaaa:我也检查了大小写...但是没有不同阿ToT怎麽办 11/02 17:45 : 推 LPH66:那还是贴个code看看好了@@| 11/02 18:39 : 我的code, 有点长= = http://w3.nctu.edu.tw/~u9212037/ : 里面有1些标头档是在 : http://www1.pacific.edu/~wford/fordtopp/cs2book/cs2_index.html 下载的, : 我是用VC++6.0的那个压缩档 : http://www1.pacific.edu/~wford/fordtopp/cs2book/ftsoftds_VC++6.zip : 如果各位能播空看看, 小弟将感激不尽! 好多错...orz ===================分隔线=================== 1.函式宣告不应该在main里面 要让它出现在外面 所以把那十几行函式宣告搬出main 放在enum下面 但是这麽一来会出现15个error 先来看第一个 xxx.cpp(15) : error C2955: 'vector' : use of class template requires template argument list 指向刚搬出去的宣告第一行 这是因为vector是有template的 你忘了附上 ===================分隔线=================== 2.把前面七行宣告中所有的vector加上<T> 前面加上template <class T> 加完再compile 这次又出现link error 仍然是timesort函式的问题 (其实这才是你的问题 但是这问题...嗯...等等你就知道了...) 看看timesort函式的实作 发现有加上template <class T> 於是照加 ===================分隔线=================== 3.加好再compile一次 这次出现16个error 指向呼叫timesort的16行 这里问题来了 它的错误讯息是: xxx.cpp(39) : error C2783: 'void __cdecl timesort(enum sortType,enum testType, int)' : could not deduce template argument for 'T' 它不能决定timesort是用哪一个 T 到底是int/char/long/double/...哪一个都不知道 那要怎麽让compiler知道我们要用哪一个 T 呢? 我想到的做法是传一个变数值进去 值本身没有意义 只是用来指出型态 所以我把函式宣告改成这样: template <class T> void timesort(sortType stype, testType tst, int vecSize, T typevar); 然後在所有呼叫的地方加传一个参数0 表示我们要用int ex: timesort(Selection, Rand, nEx, 0); 当然实作的地方也要改 ===================分隔线=================== 4.改好了之後compile, 这次还是15个错, 不过指向了timesort内部了 第一个是: xxx.cpp(84) : error C2065: 'create' : undeclared identifier 咦? 你不是写了create函式了吗? 回头看宣告: template <class T> vector<T>& Create(testType t, int n); O my god.... 再来看第二个: xxx.cpp(84) : error C2065: 'vecSiZe' : undeclared identifier 等等..vecSiZe不是参数吗? 看宣告: void timesort(sortType stype, testType tst, int vecSize, T typevar) ...........orz 然後一看, 下面的五组全部都打错 orz orz orz ===================分隔线=================== 5.费了一番工夫把五个全改回来 再度compile 13个error... 第一个是: xxx.cpp(84) : error C2783: 'class std::vector<T,class std::allocator<T> > &__cdecl Create(enum testType,int)' : could not deduce template argument for 'T' 指向 vector<T>&testv=Create(tst, vecSize); 这一行 和上面3.的原因一样 无法决定T 所以照3.的方法修改 只是这次直接把typevar传进去 因为它就是我们要的T 顺便把R,A,D三个函式也改好 ===================分隔线=================== 6.改好後再度compile 8个error 第一个说: xxx.cpp(85) : error C2318: no try block associated with this catch handler 仔细看code...同学 你写了catch忘了try啦.... ===================分隔线=================== 7.把五个try全部补上 再compile (你在case Insertion:的宣告忘了;结束...) 终於剩下2个error了... 2个分别是: xxx.cpp(94) : error C2065: 'testv' : undeclared identifier xxx.cpp(97) : error C2065: 'tshow' : undeclared identifier 嗯? 不是testv已经宣告了吗? 怎麽还说没有? 其实是因为你把宣告摆在try{}的大括号里的关系... 在任何{}大括号中宣告的变数 一旦离开了{} 就会变成未宣告 所以要做的第一件事是把testv的宣告拉出来 第二个错: tshow是啥东东? 似乎是要呼叫show的样子? 所以把tshow改成show ===================分隔线=================== 8.再度compile 1个error xxx.cpp(80) : error C2530: 'testv' : references must be initialized 这是在说reference一宣告就要初始化 不过看看你的五个初始化 呼叫的都是Create 参数都一样 那我们可以把五个初始化统一 在函式开始就宣告好 然後把整个switch塞进一个try里 最後用一个catch来接错误 (要这麽做是为了避免7.的问题) ===================分隔线=================== 9.再度compile 3个error 不过已经出了timesort的范围了 可喜可贺XD error都是一样的: xxx.cpp(210) : error C2065: 'createR' : undeclared identifier xxx.cpp(212) : error C2065: 'createA' : undeclared identifier xxx.cpp(214) : error C2065: 'createD' : undeclared identifier 回头看宣告....同学 你又把C的大小写打错了~"~ ===================分隔线=================== 10.改好後再次compile....怎麽又是3个error?! 错误讯息告诉你CreateR吃两个参数..所以是我们在5.时加的typevar忘了传过去 所以和5.一样依样画葫芦 把typevar往下传 ===================分隔线=================== 11.compile...9个error<囧> 第一个告诉你全域函式没有this.... 同学 这里不是vector物件 这里是全域函式啊<囧> 你得宣告一个vector出来 回传其参考啊... 所以得要像这样改: template<typename T> vector<T>& CreateR(int n, T typevar) { static vector<T> v; int i; for(i=0;i<n;i++) v.push_back(rnd.random(1000000)); return v; } 宣告加static是防止它出了{}就被摧毁 ===================分隔线=================== 12.再次compile...2个link error xxx.obj : error LNK2001: unresolved external symbol "void __cdecl shellSort( xxx.obj : error LNK2001: unresolved external symbol "void __cdecl exchangeSort( <error message 後略> 看出什麽不对了没? 你又打错大小写了啦<囧> ===================分隔线=================== 13.把实作里的两个sort改成Sort 再次build... 5 error 2 warning orz orz orz orz orz orz orz 第一个错误指在shellSort的宣告区: vector<T>& t1v,t2v,finalv=v; xxx.cpp(184) : error C2530: 't1v' : references must be initialized 和8.一样的错误讯息.... 这告诉你 reference必须打一开始就必须初始化 这种情况倒不如用个指标去指它 所以把这个函式里用到的reference全部改成指标 template<typename T> void shellSort(vector<T>& v) { int g=v.size(); int h,i,j,k; vector<T> *t1v,*t2v,*finalv=&v; for(k=1;k<=n/9;k=3*k+1) { //怎麽这里有个空回圈? 记得把它填起来啊 } for(h=k;h>0;h--) { t2v=finalv; for(i=0;i<finalv->size();i++) finalv->pop_back(); //嗯?是不是忘了()?我帮你补上了 for(i=0;i<h;i++) { for(j=0;j<t1v->size();j++) t1v->pop_back(); //,这里也忘了() for(j=i,j<g;j+=h) t1v->push_back((*t2v)[j]); insertionsort(*t1v); join(*finalv,*t1v); } } v=*finalv; } 然後第二个error message: xxx.cpp(185) : error C2065: 'n' : undeclared identifier 这个更有趣XDrz n是长度吧? 那不是已经放在g了? 所以把n改成g ===================分隔线=================== 14.改完再度compile: 3 errors 第一个 xxx.cpp(197) : error C2143: syntax error : missing ';' before ')' 指向一个for 仔细看: 同学 你把第一个;打成,了 @_@ 剩下的两个: xxx.cpp(199) : error C2065: 'insertionsort' : undeclared identifier xxx.cpp(200) : error C2065: 'join' : undeclared identifier 第二个...你是想呼叫函式库里的insertionSort吧 @_@; 第三个...你想把两个vector接起来? 可是并没有join这个函式啊... 就算用(*finalv).join(*t1v);也不对 因为vector没有提供join这个函式 这个最後的问题就要你自己想办法了... (这我真的帮不到 囧兴~) -- 好累..囧 一个错拉出一大票错出来.... (而且你果然打错了不少大小写....@@|) -- "LPH" is for "Let Program Heal us".... --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.240.54
1F:推 aecho:@@ 你真是好人~~ 给你加加油~~ 11/02 21:01
2F:推 tititata:虽然我是路人甲....不过还是要说:辛苦了 11/02 21:07
3F:推 FiveAaaa:我...我好想请你吃王品...泪 11/02 21:45
4F:推 godfat:囧...有点想说同学是不是太无聊了,来帮我写作业好了... 11/02 22:00
5F:推 pcjustin:Orz,真是debug神人,我还没debug过那麽多错 11/03 00:30
6F:推 embedded:台大来的就是不一样呀.....威呀 11/03 18:59
7F:推 asontsao:112果然是我们113的强劲对手阿. 11/06 21:22







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP