Re: [問題] 請問函式讀不到的問題

看板C_and_CPP (C/C++)作者 (拋磚引玉)時間16年前 (2009/10/23 02:00), 編輯推噓5(5015)
留言20則, 4人參與, 最新討論串2/2 (看更多)
我把編譯原理講一下好了,這樣你就知道了 假設今天你有兩個檔案 // sub.cpp int sub(int a, int b) { return a>b? a-b: b-a; } //main.cpp int main(){ sub(5, 3); } 在compile的時候,他會看看sub.cpp,發現了一個sub函式的定義 檢查後確定無誤,好,sub.cpp這檔案編譯完成 接下來看看main.cpp,他發現呼叫了sub這個函式,於是compiler會往上找 可是他在main.cpp裡面怎麼往上找就是找不到sub的宣告 於是他跟你說他找不到這東西,停止編譯 函式能被定義一次,但是可以宣告多次 宣告的意思就像是跟編譯器說「你看我有這個東西」 所以我們通常如果把程式分多個檔案寫 會把函式宣告寫到.h檔裡面,把定義寫到一個.cpp就可以了 用意是要讓大家可以透過#include看的到這函式即可 然後再把.cpp去#include這個.h #include .h可以把他想成是他會把.h的東西放到cpp裡面來 所以該例會變成 // main.h int sub(int, int); // sub.cpp int sub(int a, int b){ return a>b? a-b: b-a; } // main.cpp #include "main.h" int main(){ sub(5, 3) } 這樣compiler在檢查main.cpp的時候,發現他要呼叫到sub函式 他會往上看,這時候因為你有#include宣告,所以他會找到一個候選的sub函式 接著比對型別,型別一致, 編譯器認定沒問題,編譯完成。 ※ 引述《mulder1985 (老人)》之銘言: : 請問一下大家 : 就是我的程式有寫一些副函式 : 可是在compile的時候 : 會出現有些副函式"identifier not found" : 但是有些卻不會 : 請問這類情況要如何解決呢? : 謝謝 -- 文筆不是很好阿 嘆~ 一直想寫一些基本的東西給新手好入門,像是pointer & array,overloading 不過寫出來不清不處會讓人更困惑吧 囧rz -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.143.227

10/23 02:09, , 1F
推一下:)
10/23 02:09, 1F

10/23 02:10, , 2F
話說, 雖然說可以宣告多次, 不過是寫宣告在不同檔案裡.
10/23 02:10, 2F

10/23 02:10, , 3F
在同一個.cpp如果能看到同樣的宣告兩次, 記得也是會
10/23 02:10, 3F

10/23 02:10, , 4F
error的....@_@"
10/23 02:10, 4F

10/23 02:12, , 5F
不會error耶 VC的話 = =
10/23 02:12, 5F

10/23 02:14, , 6F
不會耶 我剛也用gcc/g++試過 多次宣告沒問題
10/23 02:14, 6F

10/23 02:14, , 7F
(大驚) 我記錯了嗎....@_@"
10/23 02:14, 7F

10/23 02:16, , 8F
對不起, 真的是我自己記錯了....Orz
10/23 02:16, 8F

10/23 02:18, , 9F
非常抱歉, 可能是和會ambiguous的狀況搞錯了<(_ _)>
10/23 02:18, 9F

10/23 02:18, , 10F
V大寫過太多程式 所以搞混了 我也常這樣 XD
10/23 02:18, 10F

10/23 02:18, , 11F
ambiguous是多個候選版本但選不出結果 沒記錯的話XD?
10/23 02:18, 11F

10/23 02:18, , 12F
套一句網路上忘了哪裡看來的文章裡人家說的話....
10/23 02:18, 12F

10/23 02:19, , 13F
等我寫了幾年的程式以後才發現, 其實我只是寫了同樣的程
10/23 02:19, 13F

10/23 02:19, , 14F
事寫了好幾年....Orz
10/23 02:19, 14F

10/23 02:20, , 15F
對啊~overloading寫壞ambiguous時,compiler就會抱怨了XD
10/23 02:20, 15F

10/23 02:20, , 16F
大家都是這樣吧 然後就會在發現的這一刻實力提升了 XD
10/23 02:20, 16F

10/23 02:21, , 17F
可能的話, 人家比較想薪水提升一下啊....(淚奔Q_Q~)
10/23 02:21, 17F

10/23 07:46, , 18F
原po的方法是教大家避免multiple definition吧
10/23 07:46, 18F

10/23 12:27, , 19F
不是耶 重複定義 避免的方式 很多
10/23 12:27, 19F

10/23 12:27, , 20F
這篇只是單純講一下 編譯順序而已...
10/23 12:27, 20F
文章代碼(AID): #1Au9tPUR (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Au9tPUR (C_and_CPP)