[問題] c++中引入c時static 使用問題

作者: sea010461 (sin of bleed)   2015-02-02 11:12:03
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
g++,gcc
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
nauty.a
問題(Question):
我想在C++中使用nauty這個圖論相關的程式。但是這個程式是用c寫成的。
我想先從最基本的部份開始。但是一開始就遇到問題OTL。
我的測試程式大概樣子是這樣
extern "C"{
#include "nauty.h"
}
int main()
{
...
static DEFAULTOPTIONS_GRAPH(options);
...
}
在 nauty.h中關於DEFAUTOPTIONS_GRAPH(options)的資訊是
#define DEFAULTOPTIONS_GRAPH(options) optionblk options = \
{0,FALSE,FALSE,FALSE,TRUE,FALSE,CONSOLWIDTH, \
NULL,NULL,NULL,NULL,NULL,NULL,100,0,1,0,&dispatch_graph,
\FALSE,NULL}
我感覺上因為nauty有很多參數設定細節,所以他做了一個這樣的東西。
但是當我開始compile的時候
g++ -o testcpp -Wall testcpp.cpp nauty.a
出現
error: ISO C++ forbids declaration of ‘DEFAUTOPTIONS_GRAPH’
with no type [-fpermissive] static DEFAUTOPTIONS_GRAPH(options);
請問這是遇到什麼樣的問題,該如何解決呢?我不是非常懂C++或是C
的運作,我想可能是一些基礎觀念不懂,如果有關鍵字可以讓我咕狗
也是非常感謝。因為我咕狗出來的結果通常是沒有include某個.h檔
但是好像不太是我的情況。
感謝。
作者: OPIV (Monitor)   2015-02-02 14:19:00
#include "*.h" || #include <*.h>
作者: TobyH4cker (Toby (我要當好人))   2015-02-02 15:50:00
#$%^@$#$^#$!@^#&....你應該沒寫過C/C++
作者: sea010461 (sin of bleed)   2015-02-03 00:23:00
抱歉打錯了,其實我的code裡是#include "nauty.h"
作者: LPH66 (-6.2598534e+18f)   2015-02-03 15:05:00
我剛剛看了一下 nauty.h, 裡面已經有 extern"C" 了你要不要試著把你自己的 extern"C" 拿掉?(雖然這是 macro 定義的問題, 看起來不像跟這個有關就是..)
作者: sea010461 (sin of bleed)   2015-02-04 00:00:00
謝謝,我後來沒有拿掉extern "C",但是把macro的定義直接在c++ main裡面static optionblk options={...}就可以跑了,但是我還是不是很清楚到底發生什麼事情,為什麼已經在.h裡面定義的macro會出這個問題,在c裡面直接寫可以但是c++不行,然後部知道去哪裡找答案OTL
作者: lf5471 (lf)   2015-02-06 00:50:00
有個天外飛來一筆 dispatch_graph, 會是這個問題嗎?

Links booklink

Contact Us: admin [ a t ] ucptt.com