Re: [問題] 出現 was not declared in this scope

看板C_and_CPP作者 (^.< 啾咪 ~)時間12年前 (2013/09/28 22:25), 編輯推噓0(0024)
留言24則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《maik060 (^.< 啾咪 ~)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : linux : 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) : no : 問題(Question): : 有一個檔案 c.cpp 的內容如下, : #include "./externC.h" : int main(int argc, const char *argv[]) : { : foo(); : return 0; : } : 這是 externC.h 的內容, : void foo(void); : 使用 gcc -c c.cpp 卻出現了, : c.cpp: In function ‘int main(int, const char**)’: : c.cpp:4:9: error: ‘foo’ was not declared in this scope : 若是將 c.cpp 改成如下 : void foo(void); : int main(int argc, const char *argv[]) : { : foo(); : return 0; : } : 就沒問題了, : 請問這將 void foo(void); 寫在 .cpp 中, : 跟將 void foo(void); 寫在 .h 中,在讓 c.cpp 做 include , : 這樣有何差別呢 ?? : 謝謝 ! ! 這是三個檔案 ==c.c== #include "./externC.h" int main(int argc, const char *argv[]) { foo(); return 0; } ==c.cpp== #include "./externC.h" int main(int argc, const char *argv[]) { foo(); return 0; } ==externC.h== void foo(void); 然後分別下 gcc -c c.c (沒有問題) gcc -c c.cpp 出現下面的 error message c.cpp: In function ‘int main(int, const char**)’ c.cpp:4:9: error: ‘foo’ was not declared in this scope 還是不知道為什麼 .. 感謝 ! ! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.163.48.108

09/28 22:31, , 1F
你沒有實做foo()的內容...
09/28 22:31, 1F

09/28 22:33, , 2F
你的 .h 只是告訴他說你要預留這個位置,但你告訴他
09/28 22:33, 2F

09/28 22:33, , 3F
要有預留,但卻沒告訴他要做什麼
09/28 22:33, 3F

09/28 22:34, , 4F
d 大,是說 c++ 跟 c 的編譯過程不一樣嗎 ?
09/28 22:34, 4F

09/28 22:34, , 5F
你在 c 底下為什麼會過...詭異
09/28 22:34, 5F

09/28 22:36, , 6F
c 會過是因為, gcc -c 這個 -c 是關鍵,還沒到 linking
09/28 22:36, 6F

09/28 22:37, , 7F
還不用知道這個 foo() 被實作在哪邊,我想應該是這樣
09/28 22:37, 7F

09/28 22:38, , 8F
如果我把 void foo(void); 這行不放到 externC.h 中,
09/28 22:38, 8F

09/28 22:38, , 9F
而是直接放到 c.cpp 中,然後在將第一行 include 拿掉,
09/28 22:38, 9F

09/28 22:39, , 10F
就可以了耶
09/28 22:39, 10F

09/28 22:41, , 12F
我用這兩個檔案測試,用g++ -c 或 gcc -c 都正常
09/28 22:41, 12F

09/28 22:41, , 13F
沒有發生你說得錯誤,你把你inlcude的./拿掉看看
09/28 22:41, 13F

09/28 22:41, , 14F
我兩個檔案目錄都放同一層
09/28 22:41, 14F

09/28 22:42, , 15F
我5f說得錯誤請忽略,我後來注意到你的是-c
09/28 22:42, 15F

09/28 22:46, , 16F
我個人認為你應該是.h沒連結到
09/28 22:46, 16F

09/28 22:49, , 17F
d 大,真的可以,用你的就可以了,可是我也試了 b.h 前
09/28 22:49, 17F

09/28 22:50, , 18F
再加個 ./ 也就是 #include "./b.h" 也還是可以,
09/28 22:50, 18F

09/28 22:56, , 19F
你比對看看有什麼不一樣,我倒是沒看出什麼不同
09/28 22:56, 19F

09/28 23:01, , 20F
d 大,我用 vimdiff 比對 b.h 跟 externC.h 沒有不一樣,
09/28 23:01, 20F

09/28 23:01, , 21F
但是若 include b.h 就可以,但是 include externC.h
09/28 23:01, 21F

09/28 23:02, , 22F
就不行,後來我把 externC.h 砍掉,再重打一次一模一樣的,
09/28 23:02, 22F

09/28 23:03, , 23F
就一切都好了,猜可能是那個 externC.h 出了問題,
09/28 23:03, 23F

09/28 23:03, , 24F
d 大,太感謝了,陪我 debug 這麼久,感謝!!Q_Q
09/28 23:03, 24F
文章代碼(AID): #1IHkRSNT (C_and_CPP)
文章代碼(AID): #1IHkRSNT (C_and_CPP)