看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC, Linux 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 因為公司想使用hash table的功能, 我在網路上搜尋一下c寫的hash table都沒有c++的map好用! 所以我打算把cpp的程式包成.o,讓c去使用(前輩很堅持要用c..) 目前在compiler階段就錯了! 錯誤結果(Wrong Output): Map.h:4: 錯誤:expected identifier or 「(」 before string constant main.c: In function 「main」: main.c:6: 警告:隱含宣告函式 「map_insert」 make: *** [main] Error 程式碼(Code):(請善用置底文網頁, 記得排版) Map.h #ifndef MAP_H #define MAP_H extern "C"{ void map_insert(char* SrcKey,char* SrcVal); }; #endif Map.cpp #include "Map.h" #include <map> #include <iostream> using namespace std; map<char*,char*> mymap; void map_insert(char* SrcKey,char* SrcVal) { mymap.insert( pair<char*,char*>(SrcKey,SrcVal) ); } main.c #include <stdio.h> #include "Map.h" int main() { map_insert("key","value"); return 0; } 補充說明(Supplement): makefile的內容是 CC=gcc -Wall -Wextra CPLUS=g++ -Wall -Wextra main:clean map $(CC) main.c Map.o -o main.out map:Map.h Map.cpp $(CPLUS) -c Map.cpp clean: rm -f *.o *.out -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.220.204.217 ※ 編輯: angleevil 來自: 61.220.204.217 (08/29 17:02) ※ 編輯: angleevil 來自: 61.220.204.217 (08/29 17:06)
Bencrie:C 沒有 extern "C" ... 用 macro 避開吧 08/29 17:41
angleevil:厄..不會是要我把map_inset的函式改成巨集吧. 08/29 17:45
Fenikso:#ifdef __cplusplus(換行)extern"C"{(換行)#endif 這樣 08/29 17:47
littleshan:兩回事,請 google 找 __cplusplus 看第一篇 08/29 17:49
loveme00835:最後用 c++ linker 08/29 18:50
angleevil:$(CPLUS) main.c Map.o -o main.out<--今天有這樣用! 08/29 21:38
freelancer:map 不是hash table,是tree 08/29 23:36
EntHeEnd:請使用 unordered_map 08/29 23:56
angleevil:I know it is a tree.But I focus on compiler! I hate 08/30 01:23
angleevil:my coworker limit a c language. 08/30 01:24
angleevil:我記得很久以前,也有人討論這個! 有人知道哪篇嗎? 08/30 01:27
loveme00835:照著前幾樓的去 google 一點也不難, 加油好嗎? 08/30 01:42
loveme00835:https://gist.github.com/3516034 08/30 01:42
angleevil:厄! sorry! 我會加油的! 08/30 02:32
EdisonX:我想問堅持用 c 的理由 XD 08/30 02:53
EntHeEnd:推板主 08/30 03:02
angleevil:不想用和學c++阿~~這個在業界很常發生! 08/30 08:14
EdisonX:我以為現在的情況是,c再強不會c++很沒競爭力 Orz 08/30 16:55
purpose:C++ 自己都沒競爭力了 08/30 17:00
EdisonX:TIOBE ,C/C++ 曲線拿來看是有點讓我嚇到.. 08/30 17:42
damody: 看領域吧?像圖學用到CGAL的話一定要用C++ 08/31 03:04
angleevil:c++ 的問題一直是爭議性很大的點,回歸到最後! 幾乎是 08/31 09:32
angleevil:無法有效掌握它導致的! oo還是習慣java 程序還是c 08/31 09:34
angleevil:至於前輩們不想學很正常,如果我不是先碰c++,我也沒動力 08/31 09:35
angleevil:接觸其他語言,不論哪種語言(除非一開始有碰c java) 08/31 09:36
angleevil:不然去學c++,成本督過高了! 08/31 09:37