2014-04-16 77 views
0

我試圖從.mat文件中將1100x1100矩陣複製到類型爲float的數組變量 C++中。我在網上閱讀,發現圖書館是一個不錯的選擇。我在Ubuntu 12.04上使用「make」安裝了他們的庫(我按照他們網頁上給出的方法)。 但是,我無法使用它編寫代碼,主要是因爲我是C++新手。我正在使用g ++來編譯文件。我收到諸如「Mat_Open的未知引用」等錯誤。 我沒有找到網頁上的這段代碼:將.mat文件中的值輸入到C++中的數組中

#include <stdlib.h> 
#include <stdio.h> 
#include "matio.h" 
int main(int argc,char **argv) 
{ 
    mat_t *matfp; 
    matvar_t *matvar; 
    matfp = Mat_Open(argv[1],MAT_ACC_RDONLY); //here argv[1] is "a.mat"? 
    if (NULL == matfp) 
    { 
     fprintf(stderr,"Error opening MAT file %s0,argv[1]); 
     return EXIT_FAILURE; 
    } 
    matvar = Mat_VarReadInfo(matfp,"x"); // x is the variable we are trying to access? 
    if (NULL == matvar) 
    { 
    fprintf(stderr,"Variable ’x’ not found, or error reading MAT file\n"); 
} 

我有幾個問題:

  • 這裏,的argv [1]對應於.MAT文件我想開放權利?
  • x在此代碼中存在的.mat文件中的變量我試圖複製?
  • 當我運行這段代碼時,我收到錯誤,說明 - 對Mat_Open的未知引用等等。另一對相同類型的錯誤也在那裏。

我編譯使用:g++ abc.cpp -o test。 (後面是./test。但是我從來沒有因爲編譯過程中出現錯誤而陷入困境)。

我該如何讓它工作?我使用的代碼有錯誤嗎?或者使用我正在使用的編譯語句 - 也許有一些鏈接器需要用於編譯。

謝謝。請記住我是C++的新手。任何意見將是有益的。

回答

0

1)argv [1] - 是您在程序調用後放置的第一個參數。如果你想「覺得」,使用調試器或代碼:

#include <iostream> 
for (unsigned i = 0; i < argc; ++i) 
{ 
    std::cout << argv[i] << std::endl; 
} 

2)是的,看着http://libmatio.sourcearchive.com/documentation/1.3.4/group__MAT_g4c8205ff25c5b688a40775fbb1840b7e.html我可以說,你會讀名爲「X」的變量。 3)「未定義的引用」意味着你需要使用matio庫來構建。給你的編譯字符串添加「-lLibraryName」之類的東西。它將不得不建立。

爲了避免很多問題,請嘗試安裝Code :: Blocks,它是跨平臺的,並且如果您以前從未使用過C++,就很容易開始使用C++。它也支持調試器,所以你會很容易避免許多問題。

+0

我將安裝CodeBlocks。但是一旦我安裝了它,我將在哪裏添加庫文件等?另外,我不明白「你在程序調用後放置的第一個參數」是什麼意思。我對C很熟悉,而且C++的確有很大不同。 另外,被調用的輸入.mat文件在哪裏? – mysticsasuke

+0

創建新項目。添加你需要的所有資源。在菜單中選擇:項目 - >選項。在打開的窗口中選擇「鏈接器設置」來添加庫文件,並選擇「搜索目錄」來設置包含您的頭文件的目錄列表。 – Arkady

+0

你好,哪裏是.mat文件將被輸入到上面的代碼中提到的C++程序? – mysticsasuke

相關問題