2015-06-22 149 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);