1樓:魚欲語
#include
#include
class cdog
public:
unsigned int m_weight;
unsigned int m_age;
cdog();
cdog();
cdog::cdog()
m_weight=1;
m_age=2;
printf("construct instance");
cdog::~cdog()
int main()
cdog mydog;
printf("%d",;
return 0;
定義類少了個分號。
2樓:網友
樓主需要努力,語法錯誤自己仔細點,再上網查查。
3樓:愛無聲
類結束後,沒寫分號。
關於c/c++中 編譯鏈結的問題。
4樓:匿名使用者
這個問題不是一兩句話可以解釋完。
1、微軟提供給我們的mfc已經編譯成靜態lib和動態lib,同時,為方便除錯,微軟將mfc原始碼(cpp檔案)也放到vc裡一起釋出了;這裡會存在兩種情況,如果是靜態lib,那麼功能**會在鏈結時鏈結進你的exe檔案中,所以這種靜態lib方式時,exe檔案通常都比較大;如果是動態lib的方式,那麼執行的時候就需要檔案,但exe檔案體積比較小。
2、如果你理解了1,我再進一步解釋,mfc工程配置的時候預設會鏈結的,所以你的工程裡只需要包含對應的標頭檔案,例如 之類的檔案即可,編譯器在編譯階段是不需要知道具體實現**在**的,它只需要知道宣告即可編譯通過,同時編譯器會將那些外部的函式(即不是在當前cpp檔案實現的函式)標記為需要修復的(我們先把它叫做修復吧);那麼,假如我用了乙個mfc的函式,現在我只有宣告,它是怎麼找到具體的實現**呢,這就是鏈結器的工作了,剛才我說過,mfc工程預設是會鏈結的,所以鏈結器在工作的時候,它會遍歷所有編譯過的檔案,從裡面找出要修復的項,然後再遍歷lib檔案,如果在lib檔案裡找到對應的實現,那麼鏈結器會把編譯階段留下的手尾fix掉。
3、如果你理解了2,我們再進一步解釋2;鏈結器鏈結lib的時候,會有兩種情況,第一種,這個lib本身是乙個靜態lib,包含了具體的實現;第二種,這個lib本身只是一箇中介,它是指向dll的某個函式的;對於第一種情況,鏈結器會把用到的所有**鏈結進去,注意,在release版本情況下,鏈結器只會把用的的函式鏈進去,就是說,即使你的靜態lib有10mb,你也不需要擔心編譯出來的exe有10mb,它只會把用到的函式鏈進去;;對於第二種,是指向dll某個函式的,鏈結器會在exe的pe部裡的匯入表部分,增加乙個項,這個項指向dll的函式,同時在修復編譯階段留下手尾的地方,讓它jmp(跳轉)或call(呼叫)到我們dll函式里。
以上純屬個人解釋,因為在編譯鏈結階段是非常複雜的,一時間沒辦法完全解決齊,有問題可以繼續追問。
5樓:
你的理解基本正確。
標頭檔案裡不一定都是宣告,還有更多的是庫函式等。包含了標頭檔案你寫的函式或常量在編譯時就能找到定義例項了。標頭檔案主要是一些ascii檔案,編譯時開啟包含了的檔案,比如說你在**中寫有printf這年函式,那麼編譯器就在標頭檔案中查詢printf的定義實體(也叫實現),把它一併嵌入你的**中,就像你自己寫了乙個printf放在那裡,然後與你的**一起進行編譯。
不包含相關的標頭檔案,編譯器就不認識你**中的printf是啥東西,就要報錯。編譯完成後,那些標頭檔案就關閉了,編譯後的檔案中只包括了你的**中需要的部分,所以是很經濟的。當然,編譯過程比這複雜一些,這裡只簡單說了一下關於標頭檔案的事。
6樓:網友
標頭檔案裡不一般只有宣告麼?
一般來說標頭檔案只有宣告,但不是絕對的。
include了宣告之後,編譯器就能自動找到這些聲名的實現**?
並不一定要找到實現**,而是找到它的實現(一般不是你自己寫的**它的實現都在靜態庫中(.lib))。vs在編譯的時候會連線很多靜態庫以及動態庫(.dll)
7樓:網友
實現一般都放在庫檔案裡,每次你編譯build時候都會鏈結這些庫的。
編譯鏈結器通常會預設鏈結標準庫的。
8樓:卡爾丹爐
你可以看一下預編譯的概念,mfc中的就是這種預編譯頭,它用到的頭和庫基本都包含了。
c++編譯錯誤
9樓:匿名使用者
我也出現過這個情況, 不過那是好早以前的事情了,不太記得是怎麼解決的 你是不是用的中文版的啊? 換個英文版試試。
有沒有大神能回答一下c語言編譯的問題啊?
10樓:網友
「在c語言中,一段**寫好以後不是要進行編譯成計算機可以識別的二進位碼麼,這個碼和儲存的碼一樣麼?」
編譯完之後都只是相對定位的模組,還需要通過連線轉化為絕對定位的模組。最後生成的**就是儲存的**。
還有乙個問題是比如我寫的**是int i=0這段**編譯後是隻儲存i=0還是int編譯後也會儲存進去啊,是隻儲存資料還是整個**全部儲存進計算機啊?」
你只寫了個int i=0,實際對於計算機有很多工作要做,需要根據前面程式的運**況進行記憶體分配,並對這個變數進行清零操作。
你提的這些問題,看看《編譯原理》都能解決……
11樓:橋起運
sum2=merge(a,sum1,b,2);這個函式出問題了 以為返回值為6,而a定義的空間為5 所以越界 自然奔潰。
這個 類與物件程式為什麼會編譯錯誤呢?
12樓:du大團
這個問題的出現比較普遍,主要有幾個方面:
病毒引起的,對電腦全盤防毒。
硬體上辯運的原因,主要是記憶體條不相容引起的,必要時更換記憶體。
系統或其它軟體引起的。
開啟或關閉ie、qq、遊戲等出現該記憶體不能為read或written,首先想到可能就是這款軟體的問題,(一般來解決辦法就是解除安裝重新安裝、公升級或更換其它版本,不行只有解除安裝該軟體,問題祥基才能解決)。
1)系統本身有問題,及時安裝官方發行的補丁,必要時重灌系統。
2)某個軟體出現的問題,這裡主要是看看開機時執行的軟體,(用360等檢查開機執行的軟體,把不必要執行的軟體都去掉),軟體衝突,解除安裝有問題的軟體。
下面有兩種處理方法可以試試:【如果不行謹灶謹只有恢復或重灌系統了】
1)試用命令排除。
開始-執行- 輸入cmd-- 回車,在命令提示符下輸入下面命令。
for %1 in (%windir%\system32\*.dll) do /s %1
怕輸入錯誤,可以複製這條指令,然後在命令提示符後擊滑鼠右鍵,打「貼上」,回車,耐心等待,直到螢幕滾動停止為止。
2)執行regedit進入登錄檔, 在hkey_local_machine\software\microsoft\windows\currentversion\explorer\shellexecutehooks 下,應該只有乙個正常的鍵值, 將其他的刪除。
感情類的,高手請幫忙
食之無味?不喜歡就不吃,哪來的棄之可惜。我感覺她是在把你當後備,或者把你吊著可以證明她的魅力 也或者就只是純粹無聊的時候想起你,逗哈你 我感覺你的希望是渺茫的 因為她的行為又不像是在考驗你什麼 你可以邀請一些人在一起玩玩啊 比如他的朋友好的之類的!多出去玩玩增進距離啊。聊qq能聊些什麼?都是做了的事...
c 函式結構問題,請高手幫忙,C 一些疑問,請高手幫忙理解一下
是引用的意思 第一個 表示函式返回的一個stock型別的引用第二個 表示函式傳入的引數是一個stock型別的引用如果你不知道引用是啥,那我一句話兩句話也沒法給你解釋清楚,你可以自己上網查查資料 引數型別 引數名 按照這個劃分,對應如下 const stock stock topval const s...
c語言的程式設計題目,請高手幫忙!謝謝
第一題 從鍵盤輸入任意兩個正整數x和y,程式設計求出兩數的最大公因子和最小公倍數 include int main void a 0 b 0 for i 2 i x y i if a 0 printf d 和 d 沒有公因子。最小公倍數是 d。n x,y,b else printf d 和 d 的最...