bcc32 linking Error |
尚未結案
|
asd98537
一般會員 發表:27 回覆:25 積分:10 註冊:2002-10-23 發送簡訊給我 |
將class的宣告放在.h,實作放在.cpp
如图所示:主程式和其它兩個class之间的關係,箭號表誰被#include
我在command mode,下
bcc32 ex.cpp CMMF.cpp CFunc.cpp
會發生如下的的link error
Error: Unresolved external r2b(xx) referenced from CMMF.OBJ 我該如何修正它們之間include關係或是編譯連結時的參數,才能顺利通过linking? 發表人 - asd98537 於 2003/04/12 10:48:17
|
asd98537
一般會員 發表:27 回覆:25 積分:10 註冊:2002-10-23 發送簡訊給我 |
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
引言: 上圖中只要把CFunc.cpp裡面的實作移到和CFunc.h裡就沒問題 請問不能把宣告和實作分開嗎?其實你可以參考BCB的Form的unit1.cpp跟unit1.h的寫法. //--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H<----在Unit1H你的CFunc.h中應該為CFuncH //--------------------------------------------------------------------------- #include記住紅色字部分需要加進你的CFunc.h中 在你的CFunc.cpp中記得#include CFunc.h,然後就可以在CFunc.cpp做Function的實做 但記得要在你的CFunc.h將你寫好的functuin定義清楚喔! //--------------------------------------------------------------------------- #include網路志工聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]--- 發表人 - axsoft 於 2003/04/14 10:53:13 |
asd98537
一般會員 發表:27 回覆:25 積分:10 註冊:2002-10-23 發送簡訊給我 |
//---------------------------------------------------------------------------#ifndef Unit1H#define Unit1H<----在Unit1H你的CFunc.h中應該為CFuncH//--------------------------------------------------------------------------- #ifndef Unit1H#define Unit1H
定義這個的目的在於防止重複include
我在每個.h宣告都有加入自已的#define xxxH
我編譯時打
bcc32 ex.cpp CMMF.cpp CFunc.cpp
它確找不到r2b(xx)在CFunc.cpp的實作
我目前的解決方法只有把func.cpp的實作全部移到CFunc.h裡
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
引言: //---------------------------------------------------------------------------#ifndef Unit1H#define Unit1H<----在Unit1H你的CFunc.h中應該為CFuncH//--------------------------------------------------------------------------- #ifndef Unit1H#define Unit1H 定義這個的目的在於防止重複include 我在每個.h宣告都有加入自已的#define xxxH 我編譯時打 bcc32 ex.cpp CMMF.cpp CFunc.cpp 它確找不到r2b(xx)在CFunc.cpp的實作 我目前的解決方法只有把func.cpp的實作全部移到CFunc.h裡asd98537您好: 因為圖我看不見,所以不知你的問題發生狀況,只能照您描述的給你回答.. 您是否有在 > <>網><>路>志<>工>聯盟---- href="http://www.vista.org.tw">http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]--- |
asd98537
一般會員 發表:27 回覆:25 積分:10 註冊:2002-10-23 發送簡訊給我 |
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
引言: 我找到原因了,我這個function 是friend void r2b(xx)在實作的部分,把它寫成inline void r2b(xx) ,拿掉inline就linking就過了 請問使用inline有何限制? 發表人 - asd98537 於 2003/04/14 21:48:23inline的使用是為了配合巨集定義內簡易函數之使用,以inline保留字加在函數前,則程式在編譯時就可將該函數放入程式內,宛如巨集之取代作用以加快程式的執行 Syntax: inline < datatype > < class > _ < function > (< parameters >) { < statements >; Example: inline char* cat_func(void) { return char*; } 注意"inline"這個關鍵字.他告訴編譯器將函式直接展開到程式碼,而不是以 函式呼叫的方式.如果你所用的編譯器不支援"inline"或"_inline",嘗試利用 "static function"來定義這樣的函式 在 The C Programming Language, 2nd ed. 書中曾提到: INLINE func 的可見範圍 (scope) 乃比照 static func, 也就是: 僅限於該檔案本身 (及用 #include 來叫進含這個 INLINE 檔的其他程式檔案中) , 所以通常 INLINE func 的定義應出現在類似用 #define 來定義一個 "巨集函數" 的場合, 也就是: 應出現在『欲使用該 func 的檔案可看到該定義, 而非僅是該宣告』的場合。 所以若是 INLINE func 僅在該程式檔中用到而已 (即 static func 的意思) , 就放在一般函數該放的地方即可; 否則, 通常將該定義放在 .h 檔中, 以便所有要用到此 INLINE func 的檔案都能看到該定義 (想想 #define 的情形,就能明瞭這點) 。 從上面可知: 每次想呼叫該 INLINE func 的時候, 對 compiler 來說, 一定能夠『完整看到』該 INLINE func 的定義, 而不像一般 func 可能當時早已位於程式庫中, 而看不到該定義; 可能根本就還沒定義, 只有宣告而已。於是答案就很明顯了: 每次引用時, 對 compiler 來說, 形同將該 inline func 的定義部份 "塞" 進引用到的地方 (類似 macro 的作法) , 再整個編譯一次。所以 compiler 能把它看成是你自己每次都重寫一次該部 份的程式一樣, 自然不需額外負擔 func call。同時 compiler 也能對該 inline func 做比 #define 更多的語法、參數檢查。 但由於每次 compiler 都要重新處理 inline func 的部份, 易造成 compile-time delay, 所以 C Builder 有個 pre-compiled header 的功能, 可稍減此缺點。 注意一點 使用Inline function不可做遞回使用,也就是不可自己呼叫自己,原因是巨集不能做遞回動作. 以上如有錯誤請指正! } 網路志工聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]--- 發表人 - axsoft 於 2003/04/15 10:22:32 |
asd98537
一般會員 發表:27 回覆:25 積分:10 註冊:2002-10-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |