在C ++中将.mat文件中的值输入到数组中

时间:2014-04-16 15:59:02

标签: c++ matlab

我正在尝试将.x文件中的1100x1100矩阵复制到C ++中 float 类型的数组变量中。我在网上看到,发现 matio 库是个不错的选择。我使用" make"安装了他们的库。在Ubuntu 12.04上(我按照他们网页上给出的方法)。 但是,我无法使用它编写代码主要是因为我是C ++的新手。我正在使用g ++来编译文件。我得到错误,例如"对Mat_Open的未知引用"等等。 我确实在网页上找到了这段代码:

#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 ++的新手。任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:0)

1)argv [1] - 是您在程序调用后输入的第一个参数。如果您想要感受它&#34;,请使用调试器或类似代码:

#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我可以说,你会读取名字变量&#34; x&#34;。

3)&#34;未定义参考&#34;意味着您需要使用matio库构建。添加&#34; -lLibraryName&#34;到您的编译字符串。它必须建立。

为了避免许多问题,请尝试安装Code :: Blocks,它是跨平台的,如果您以前从未使用C ++,那么很容易开始使用C ++。它还支持调试器,因此您可以轻松避免许多问题。