二维矢量误差-C++; 我是C++中矢量编程的新手。我想初始化未知大小的2D矩阵,所以我来到向量端。我有两个文件1).h和2).cpp。在.h文件中,我初始化了向量,如下所示 vector<vector<double> > vector_stor; Mat_VarReadData(vector_stor); //there are other arguments also but for demo just assume it

二维矢量误差-C++; 我是C++中矢量编程的新手。我想初始化未知大小的2D矩阵,所以我来到向量端。我有两个文件1).h和2).cpp。在.h文件中,我初始化了向量,如下所示 vector<vector<double> > vector_stor; Mat_VarReadData(vector_stor); //there are other arguments also but for demo just assume it,c++,vector,C++,Vector,Mat_VarReadData在void*数据中获取参数,我有2D向量。当我这样做的时候,这是一个错误 错误1错误C2664:“Mat_VarReadData”:无法转换参数 从'std::vector'到'void*' 谁能告诉我怎么做?这将对我很有帮助 编辑部分: matvar = Mat_VarReadInfo(mat,"data_struct"); field=Mat_VarGetStructFieldByName(matvar,"vect_stor",0); int

Mat_VarReadData在void*数据中获取参数,我有2D向量。当我这样做的时候,这是一个错误

错误1错误C2664:“Mat_VarReadData”:无法转换参数 从'std::vector'到'void*'

谁能告诉我怎么做?这将对我很有帮助

编辑部分:

  matvar = Mat_VarReadInfo(mat,"data_struct");
    field=Mat_VarGetStructFieldByName(matvar,"vect_stor",0);
    int    start[2]={0,0};
    int    stride[2]={1,1};
    int    edge[2];
           edge[0]=field->dims[0];
           edge[1]=field->dims[1];
    Mat_VarReadData(mat,field,vector_stor,start,stride,edge);
其中vector_stor是我寻求帮助的变量


谢谢

检查输入到
Mat\u VarReadData
的顺序。函数需要类似于

Mat_VarReadData( ..., vector<vector<double> > mat, ... )
然后,当我调用
foo
时,第一个参数必须是
int
,第二个参数必须是
double
。同样,您需要将输入类型与实际尝试传递的内容相匹配

另外,请查看:

看起来函数将把数据转储到一个一维数组中,而不是向量向量。试试这个:

std::vector<double> mat;
mat.resize(size_X*size_Y);
// call Mat_VarReadData with &mat[0] as your void*
// now you can index with 
mat[i*size_Y + j];
编辑:如果您想知道为什么
&mat[0]
mat.data()
(第二个需要C++11,感谢您指出)是因为
std::vector
保证是连续的,请参阅

正如其他人已经指出的那样,您既不能以
void*
的形式将
向量
也不能将
向量
直接传递到
Mat_VarReadData
,这样做根本没有安全的方法。您所能做的最好的事情是首先将数据检索到一些原始数组中,然后将其相应地转换为您喜欢的容器

我对马蒂奥不熟悉,但我会尽力为你指出正确的方向。我看了一看文档。我必须承认,这不是很有帮助,但无论如何,它表明,只有在检索到有关相应变量的信息后,才能读取任何数据。这可以使用函数来完成。此函数返回一个,它本质上是变量的描述符。在我看来,
matvar\u t
包含动态分配数据所需的所有信息,即通过使用new[]。更准确地说,应该精确地保存存储给定变量的数据所需的字节数。 我认为这或多或少是你需要做的:

警告,未测试

matvar_t* varInfo = Mat_VarReadInfo(matFileDescriptor, varName)
char* data = new char[varInfo->data_size];
Mat_VarReadData(matFileDescriptor, varInfo, (void*)(data), start, stride, edge);
我将留给你们去弄清楚起跑、跨步和边缘实际上代表什么

将数据读入数组
data
后,必须将其转换为适当的算术类型,可能是
double
,但我不能确定。只有这样,您才能将它们拟合到
向量中。不幸的是,在这方面我帮不了你,因为它太深入人心了


我知道你在努力学习c/c++和MatIO的基础知识。对于刚开始使用c/c++进行编码的人来说,这不是一个简单的库,因此我强烈建议您在尝试项目进展之前,首先仔细阅读MatIO上提供的任何文档。阅读一些c/c++的基础知识也会很有帮助。

首先,您需要将其更改为
vector\u stor.resize(size\u X)
用于(int i=0;i@Cramer..i在你发帖之前意识到并编辑了它…谢谢你,先生。@Cramer…你能告诉我怎么做吗?…对不起,我的知识有限…你编写了Mat_VarReadData()方法,或者你只是调用它?实际上,我可能:
vector\u store.resize(size\u X,std::vector(size\u Y))
,但我不确定Matlab期望的是什么样的向量。先生..谢谢你的回答,实际上我知道这些函数的基本知识..我的问题是如何使
向量
void*data
兼容?…有没有办法?谢谢,Mat_VarReadData是一个内置函数,修改也是一种方式困难…@Cramer他只是调用Mat_VarReadData(void*)。@SaadSaadi如果你调用,一个向量的向量不会有帮助。你需要提供一个连续的双精度块,并适当配置其余的参数。你不能。大多数人(包括MATLAB)的方式处理多维数组是使用单个维度然后将其拆分。假设你有一个NxM矩阵,你可以制作一个数组
double mat[N*M]
,然后用
mat[i*N+j]
mat[i+j*M]
对其进行索引,这取决于它是主列(第一个)还是主行(第二个)@brunocodutra…感谢您的解释…关于matIO,我已经开发了整个程序,但现在我希望通过不固定存储它的数组大小来方便用户,这就是为什么我计划使用vector…我的.mat文件inlcude 1 struct,它反过来包含14个不同类型和大小的变量…通过matlab中的数据大小我做了,但现在我想不使用matlab…现在正在寻找未知大小的数据…)
std::vector<double> mat;
mat.resize(size_X*size_Y);
// call Mat_VarReadData with &mat[0] as your void*
// now you can index with 
mat[i*size_Y + j];
mat[i + j*size_X];
matvar_t* varInfo = Mat_VarReadInfo(matFileDescriptor, varName)
char* data = new char[varInfo->data_size];
Mat_VarReadData(matFileDescriptor, varInfo, (void*)(data), start, stride, edge);