簡體   English   中英

如何在gcc中使用C ++矢量庫構建對象?

[英]How to build object using C++ vector library in gcc?

所以我有一些在makefile中調用gcc的工作代碼。 然后,我添加使用c ++向量stl的自己的類,並且希望編譯同一對象。

如果我只運行同一命令,則會收到錯誤消息:

fatal error: vector: No such file or directory
#include <vector>

如果我嘗試使用g ++代替進行編譯,則會得到一百萬個錯誤,因此我猜測我不應該這樣做。

我用谷歌搜索了如何向gcc調用中添加c ++庫,並被告知要使用

gcc -lstdc++

但是,這似乎沒有任何作用。 我該如何建立這個物件?

使用g ++是標准方法嗎? 如果我使用g ++而不是gcc,似乎有很多這種類型的轉換錯誤:

globals.c:1381:50: error: invalid conversion from 'void*' to 'Global*' [-fpermissive]
 struct Global *g = calloc(1,sizeof(struct Global)); /* allocate viewer context */

以及先前聲明的錯誤:

d:\mingw\include\getopt.h:46:12: error: previous declaration 'int getopt(int, char* const*, const char*)' here
 extern int getopt( int, char * const [], const char * );

這里有很多問題。 首先,“ gcc”可執行文件將同時編譯C和C ++代碼,但通常會根據文件后綴確定應將其編譯為C還是C ++。 在您的情況下,似乎已嘗試將“ globals.c”編譯為C源文件而不是C ++源文件。 C編譯器沒有在內部包含路徑列表中包含正確的目錄,因此它甚至不會嘗試打開<vector>包含。 要編譯為C ++,可以使用g ++或通過將源文件的名稱更改為具有.cpp或.C后綴的方式來強制使用。

如果您有多個源文件,那么您將需要做更多的工作。 您可能需要用C ++編譯器編譯所有內容,或者需要學習“ extern'C'”並修復C ++和C之間的接口。這可能比實際情況麻煩得多。

接下來,您將需要解決編譯中的所有錯誤。 看來您顯示的主要問題與類型轉換有關。 在C下,這些比在C ++中更寬容。

我建議您取出矢量代碼,並繼續使用純C解決方案。 您必須自己執行內存管理,但這並不難。 我過去曾使用realloc()來調整內存大小。 您需要跟蹤指向已分配內存的指針,已分配對象的數量以及緩沖區的總大小。

第一個錯誤是因為c ++中沒有從void *到其他指針類型的自動轉換。 在c中不是這種情況,因此代碼可以使用ac編譯器正確編譯,以解決您只需要像這樣強制轉換返回值

Global *g = reinterpret_cast<Global *>(calloc(1,sizeof(Global)));

還要注意,您不需要在C ++中使用struct進行聲明。

我建議使用new運算符,因為如果您向struct Global添加一個構造struct Global ,它將自動調用cosntructor,

Global *g = new Global;

但是請注意,與calloc()不同,此處的struct成員未初始化為0

重要的是要知道cc ++是不同的語言,您可以輕松編寫將使用ac編譯器而不是c ++編譯器進行編譯的代碼,例如上面的代碼,反之則更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM