2011-07-27 74 views
1

我建了一個靜態庫,並.h文件添加到我的項目,C++和Objective-C

中的所有類的.h文件,像這樣:

class StartOp 
{ 
    static void openFiles(WavInFile **inFile, WavOutFile **outFile, const RunParameters *params); 
    static void setup(SoundTouch *pSoundTouch, const WavInFile *inFile, const RunParameters *params); 
    static void process(SoundTouch *pSoundTouch, WavInFile *inFile, WavOutFile *outFile); 
    static void detectBPM(WavInFile *inFile, RunParameters *params); 
    int start(const int nParams, const char * const paramStr[]); 
}; 

我得到這個錯誤:

StartOp.h:18: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'StartOp' 

**編輯* *

我通過將文件ex改爲mm來解決了這個問題。 現在我想用這個代碼,我想從這個類調用,這個代碼是,我想打電話給他從一個Objective-C類的C++類:

#ifndef _STARTOP_H_ 
#define _STARTOP_H_ 

namespace soundtouch 
{ 

    class StartOp 
    { 
     static void openFiles(WavInFile **inFile, WavOutFile **outFile, const RunParameters *params); 
     static void setup(SoundTouch *pSoundTouch, const WavInFile *inFile, const RunParameters *params); 
     static void process(SoundTouch *pSoundTouch, WavInFile *inFile, WavOutFile *outFile); 
     static void detectBPM(WavInFile *inFile, RunParameters *params); 
     static int start(const int nParams, const char * const paramStr[]); 
    }; 
} 



#endif 

static int start(const int nParams, const char * const paramStr[]);

方法從我的objective-c iphone應用程序。

+4

'class'既不是C也不是Objective-C。看起來更像是C++ –

+0

這既不是C也不是Objective-C ... –

回答

4

您發佈的代碼不是C;它相當於C++。現在,Objective-C和C++可以互操作,但是你需要在Objective-C一側使用.mm擴展。

因此,如果您要將.h.文件導入到.m文件中,您會明顯發現錯誤,因爲編譯器不期待定義爲class(C++)。如果您將.h文件導入到.mm文件中,那麼您有一定的可能性(如果其餘部分都是正確的,我的意思是)。

如果您需要更多幫助,請提供更多代碼,以便我們更好地瞭解您正在做的事情。

+0

thx,我在第 – MTA

+0

關於你的第二個問題上添加了一些修改:你應該提供關於'start'函數的更多細節...是C函數,一個ObjC方法?更多的代碼將有助於... – sergio

+0

我有一個C++代碼,我發佈和在這個類中的函數,我想知道我可以如何調用從目標c文件C++頭中的開始方法 – MTA