2014-02-11 73 views
0

我有一個cpp文件,我試圖使用sourcecpp()從RStudio進行編譯。它包含Rcpp.h,所有必需的STL內容和「使用名稱空間Rcpp;」。編譯錯誤:'__result'未在此範圍內聲明

然後它有幾個函數聲明(不輸出到R),應該輸出到R的函數,最後是聲明函數的定義。

這是我所得到的,當我嘗試編譯:

g++ -m32 -I"C:/PROGRA~1/R/R-30~1.2/include" -DNDEBUG  -I"C:/Users/Michelle/Documents/R/win-library/3.0/Rcpp/include" -I"d:/RCompile/CRANpkg/extralibs64/local/include"  -O2 -Wall -mtune=core2 -c RW_FastSwap.cpp -o RW_FastSwap.o 

RW_FastSwap.cpp: In function 'SEXPREC* sourceCpp_27691_fastswap(SEXP, SEXP, SEXP, SEXP, SEXP)': 

RW_FastSwap.cpp:459:9: error: '__result' was not declared in this scope 

make: *** [RW_FastSwap.o] Error 1 


Error in Rcpp::sourceCpp("C:/Users/Michelle/Desktop/Google Drive/FastSwap/RW_FastSwap.cpp") : 
    Error 1 occurred building shared library. 

該行數比cpp文件的最後一行15行以上,即cpp文件的最後一行是444我已確保從導出函數返回的結果類型與函數的返回類型相匹配。

任何有關解決此問題的指導將不勝感激。

+0

該文件是否保存?如果刪除'.o'文件並再試一次,會發生什麼? – doctorlove

+0

如何刪除.o文件? –

+0

什麼版本的Rcpp?什麼是生成的實際源文件 - 你可以發佈'sourceCpp(...,verbose = TRUE)'的輸出嗎? –

回答

2

我們可能需要看代碼或模擬版本。

當你使用compileAttributes()函數來編譯一個Rcpp函數---不管是通過按下RStudio中的按鈕,還是明確地---它會在代碼樣本週圍創建額外的代碼(基本上處理數據轉換等)。

我想我可能已經看到了這個錯誤,當我做了一些愚蠢的事情,如不包括正確的返回語句。

編輯根據伊恩的評論:這(在這裏與手動換行符爲SO)對我的作品

R> cppFunction("IntegerVector fastswap(const NumericMatrix x, const int p, \ 
        const IntegerVector S_init, const IntegerVector fixed_in, \ 
        const IntegerMatrix order) { return S_init; }") 
R> str(fastswap) 
function (x, p, S_init, fixed_in, order) 
R> 

所以,你可以有你的電腦設置有問題。但由於這裏幾乎沒有任何可以肯定的說法,所以可再生

+0

如果我註釋掉函數體並把它變成這樣:IntegerVector快速交換(常量NumericMatrix X,const int的P, 常量IntegerVector S_init, 常量IntegerVector fixed_in, 常量IntegerMatrix順序){ 返回S_init; } - 我仍然得到相同的錯誤。 –

+0

下劃線在S_init中,因爲某些原因,在這裏沒有顯示註釋。 –

+0

你是否明白我剛剛表明你的代碼是在我的電腦上編譯的?因此它不是你的代碼。 –