2014-12-27 34 views
0

我想在Swift下做一個C++庫工作。我在兩個人都是小菜鳥,所以我可以做一些完全愚蠢的事情,但是很欣賞所有的反饋。我有以下設置:Swift:從Swift結果使用C++庫到聯接錯誤,但爲什麼?

AnswerToEverything.cpp:

#include "AnswerToEverything.h" 
#include <iostream> 

class Everything{ 

    int answerToEverything() 
    { 
     return 42; 
    } 
}; 

AnswerToEverything.h:

#include <stdio.h> 

#ifdef __cplusplus 
extern "C" { 
#endif 

int answerToEverything(); 

#ifdef __cplusplus 
} 
#endif 

回答橋接-Header.h:

#include "AnswerToEverything.h" 

GameScene.swift :

... 
override func didMoveToView(view: SKView) { 
     /* Setup your scene here */ 
     println("C++ call: \(answerToEverything())") 
} 
... 

結果是:

enter image description here

所以我錯過了什麼?所有幫助讚賞!

+0

在標題聲明一個全局「的extern C」功能answerToEverything,在源必須定義與一個成員函數answerToEverything的類。這是兩個不同的,完全不相關的功能。你真的需要/想要哪一個? – stijn 2014-12-27 13:31:50

回答

0

您需要編寫一個"C"函數,該函數會創建您的C++對象並調用其方法,如this question中繪製的那樣。所有的解決方案看起來都有些醜陋,但如果你把這兩者混合在一起,你將不得不期待。一旦你有一個靜態鏈接的C-功能,它會被鏈接器找到。目前它只是告訴你,你沒有一個。正如@stijn指出的,C++成員方法不是那種類型。

+0

謝謝!我拿出課程,開始在「AnswerToEverything.cpp」中編寫一個新的C++函數。在第一個包括我遇到麻煩:

的#include 結果爲:「向量」文件未找到。有什麼我必須做的編譯器設置等? – user3673836 2014-12-27 21:00:03

+0

@ user3673836:您將無法在評論很清楚,你只能內聯代碼。您應該編輯您的問題(通過添加**更新:**標籤和您的新代碼/問題)或創建一個新的更具體的問題。 – Patru 2014-12-28 03:17:13