2017-12-30 26 views
-3

なぜ次のコードでは、EVectorsEValuesへのポインタは、main関数でもMYLDA関数でもnullになるのでしょうか?それを修正する方法は?この問題を解決するためのなぜuchar *マットへのポインタがnullになるのですか?

void main() 
    { 
     // some code 
     Mat EVectors; 
     Mat EValues; 
     uchar* pEVectors = EVectors.data; 
     uchar* pEValues = EValues.data;   
     MYLDA(train_labels, train_data, pEVectors, pEValues); 
     // some code 
    } 

void MYLDA(vector<int> gnd, Mat_<float> _data, uchar* eigvector, uchar* eigvalue) 
    { 
     // some code 
     GeneralizedEigenSolver<MatrixXf> ges; 
     ges.compute(DPrime, WPrime);  
     MatrixXcf eigenvectorsInEigen = ges.eigenvectors();  
     VectorXcf eigenvaluesInEigen = ges.eigenvalues(); 
     Mat eigenvectorsOpenCV(eigenvectorsInEigen.rows(), 
     eigenvectorsInEigen.cols(), CV_32FC1, eigenvectorsInEigen.data()); 
     eigvector = eigenvectorsOpenCV;  
     Mat eigenvaluesOpenCV(eigenvaluesInEigen.rows(), 
     eigenvaluesInEigen.cols(), CV_32FC1, eigenvaluesInEigen.data()); 
     eigvalue = eigenvaluesOpenCV; 
    } 
+0

あなたがそれらを割り当てたとき、彼らはヌルでしたか?彼らはどこでヌルになったのですか?どちらもデバッガで答えることができます。 – chris

+0

パラメータへの割り当ては、その機能を実行している外では効果がありません。 – molbdnilo

+0

@molbdnilo何を意味するのですか?もっと詳しく説明できますか? – Saeid

答えて

0

一つの方法は次のとおりです。

void main() 
    { 
     // some code 
     Mat EVectors; 
     Mat EValues; 

     MYLDA(train_labels, train_data, &EVectors, &EValues); 
     // some code 
    } 

void MYLDA(vector<int> gnd, Mat_<float> _data, Mat* eigvector, MAt* eigvalue) 
    { 
     // some code 
     *eigvector = eigenvectorsOpenCV;  

     *eigvalue = eigenvaluesOpenCV; 
    } 
関連する問題