2013-05-11 82 views
1

在R中,使用Rcpp訪問C++代碼,而不是將所有C++代碼放在單個文件上,如何在編譯時控制文件的使用順序。在Rcpp中控制編譯順序

可以說我有2種方法,methodPrimarymethodSecondary,我要放在不同的文件methodPrimary.cppmethodSecondary.cpp每一種方法,但讓說功能methodPrimary使用功能如下methodSecondary,:

methodSecodary.cpp

#include <Rcpp.h> 
using namespace Rcpp; 

// [[Rcpp::export]] 
int methodSecondary(int i){ 
    return(i); 
} 

methodPrimary.cpp

#include <Rcpp.h> 
using namespace Rcpp; 

// [[Rcpp::export]] 
int methodPrimary(int i){ 
    return 2*methodSecondary(i); 
} 

我拋出一個錯誤,說methodSecondary在此範圍內,這是可以理解的,因爲在每兩個文件的未聲明,還有其他沒有提到。分別。

我最初的推定是Rcpp編譯器會處理所有這一切以及封裝結構和Collate字段的使用,看似不是這種情況。

所以我的問題是,什麼是正確的過程,以正確的順序編譯/處理/聲明所有的文件?

回答

2

編譯順序無關緊要。但是每個函數都必須在編譯器接受它之前聲明。

創建一個頭文件,聲明所有的函數,並將其包含到每個C源文件中。

methods.h

extern int methodPrimary(int); 
extern int methodSecondary(int); 

在每個C源文件,使用函數之前:

#include "methods.h" 

您可以使用多個頭文件,使methodSecondary.h聲明只是功能。

+0

是的,'#include「methods.h」'需要使用「」not <>。 – 2013-05-11 02:52:12

+0

'<>'用於系統頭文件。 – 2013-05-11 03:11:35

+0

謝謝。 。 。 。 。 。 。 。 ... – 2013-05-11 03:14:51