2017-02-16 70 views
0

做一個C++函數調用的時候,我試圖在XCode中創建一個項目來訪問OpenCV的框架與基於雨燕應用程序最終使用。未定義的符號:在XCode中8

在高層次上,我有C++,它與一個C++結合界面OpenCV的框架。然後,一個Objective-C類包裝綁定,以便我的Swift代碼可以訪問它。

然而,當一切都在編輯器工作正常,當我去編譯它,我收到以下錯誤,因爲我已經在我的綁定類中定義的每個C++函數。從引用的 「庫::乘()」, :用於建築x86_64的

未定義符號+ [視圖控制器乘]在ViewController.o

以下是我的項目的縮寫版本來說明問題。

首先,受影響的文件:

enter image description here

正如你所看到的,我有我的封裝文件(ViewController.mm)適當的後綴。

ViewController.mm內容:

#import "ViewController.h" 
#import "library.hpp" 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSLog(@"Number: %f", Library().multiply()); 
} 

@end 

library.hpp內容:

#pragma once 
#include <stdio.h> 

class Library { 
public: 
    Library(); 
    ~Library(); 
    double multiply(); 
}; 

library.cpp內容:

#include "library.hpp" 

Library::Library() { } 

Library::~Library() { } 

double multiply() { 
    return 1.0 * 2.0; 
} 

相關到C生成設置++:

enter image description here

** **修訂

發表哈里什古普塔答案當然是正確的,並沒有解決我的問題。然而,我進一步調查並提出了我認爲更好的解決方案,這是爲我的C++類創建一個名稱空間,然後使用using命令將其拖入我的.mm文件中。

回答

1

您尚未將multiply()定義爲導致此問題的類函數。如下 聲明它:

double Library::multiply() { 
return 1.0 * 2.0; 
} 
+0

我要笑,我正要張貼了同樣的答案,正如我剛纔固定它,但會接受你的 - 謝謝! – CodeBender