2015-06-22 151 views
-1

我已經在C++中使用armadillo編寫了以下代碼。但是,我無法獲得任何輸出(我的輸出是cordX和cordY)。我的定義有沒有錯,它不能給出任何輸出?從C++中的函數獲取輸出

#include <iostream> 
#include<armadillo> 

using namespace std; 
using namespace arma; 

void myOrder(const mat &sOut, const mat &T, const mat &OL, mat &cordX, mat &cordY); 

int main() 
{ 
    mat sOut; 
    sOut << 100 << 120 << endr; 

    mat T; 
    T << 20 << 20 << endr; 

    mat OL; 
    OL << 5 << 5 << endr; 

    mat locX; 
    mat locY; 

    myOrder(sOut, T, OL, locX, locY); 

    cout << locX << endl; 
    cout << locY << endl; 

    system("PAUSE"); 
    return 0; 
} 

void myOrder(const mat &sOut, const mat &T, const mat &OL, mat &cordX, mat &cordY) 
{ 
    vector<double> U; 
    for (int i = 0; i < sOut(0) - T(0); i += T(0) - OL(0)) 
    { 
     U.push_back(double(i)); 
    } 


    vector<double> V; 
    for (int j = 0; j < sOut(1) - T(1); j += T(1) - OL(1)) 
    { 
     V.push_back(double(j)); 
    } 


    if ((double(U.back()) + 2*T(0) - OL(0) - 1) > sOut(0) && (double(U.back()) + T(0) !=sOut(0))) 
    { 
     U.push_back(sOut(0) - T(0) + 1); 
    } 
    colvec cordX = conv_to<colvec>::from(U); 



    if ((double(V.back()) + 2*T(1) - OL(1) - 1) > sOut(1) && (double(V.back()) + T(1) !=sOut(1))) 
    { 
     V.push_back(sOut(1) - T(1) + 1); 
    } 
    colvec cordY = conv_to<colvec>::from(V); 

    // return cordX, cordY; 
} 
+0

您聲明與某些參數具有相同名稱的局部變量。這是故意的嗎? –

+0

不!你指的是哪一個? – Sam

+0

'cordX'和'cordY'。通話結束後,您嘗試打印的兩個參數。 –

回答

1

您聲明具有相同名稱的兩個函數的自變量,cordXcordY局部變量。在本地聲明陰影參數,所以參數將不再提供給您。啓用更多警告的構建應該引導編譯器向您發出警告。

我假設你打算分配給參數,而不是創建兩個新變量。

+0

我想退回cordX和cordY。那麼,我不應該將它們定義爲我在函數中的輸入嗎? – Sam

+0

@Sam像現在一樣通過引用傳遞它們,但不要在函數內聲明具有相同名稱的變量。我對犰狳一無所知,但我想你應該做的就是'cordX = conv_to < colvec > :: from(U);',沒有使'cordX'成爲新變量的初始類型。 –

+0

你完全正確。我刪除了colvec,現在它適用於第一個輸出,但是,第二個輸出(cordY)是所有奇怪的數字! – Sam

-1

myorder函數堆棧會將結果存儲到局部變量cordX而不是引用locX。

  1. colvec cordX = conv_to < colvec> :: from(U);

所以這個locX是NULL。

可以做到這一點,以分別科迪

cordX = conv_to < colvec> ::從(U);