【发布时间】:2014-11-07 20:08:50
【问题描述】:
我在将动态分配的结构传递给函数并访问它的内容时遇到问题。
程序使用 mex 将数据从 Matlab 传递到 C++。我使用 Visual Studio。
我在 'InOut.h' 的头文件中定义的结构
#include <string>
#include <cstdint>
#include <cstdlib>
struct sObjects {
std::string Type;
float *Position;
};
typedef struct sObject sObject;
在主函数中我比分配结构在'MainFcn_Mex.cpp'中
#include "MainFcn_Mex.h"
// ...
// get number of Objects from Matlab
int N_Obj = mxGetNumberOfElements(prhs[1]);
sObjects *Objects = new sObjects[N_Obj];
for (int k=0; k<N_Obj; k++) {
// get the pointer pointer map
pMap = mxGetField(prhs[1],k,"Type");
Objects[k].Type = mxArrayToString(pMap);
// get the pointer pointer map
pMap = mxGetField(prhs[1],k,"Position");
// setting pointer to the first Element
Objects[k].Position = (float*)mxGetPr(pMap);
mexPrintf("Objects(%d,1).Type: %s \n", k+1, Objects[k].Type);
}
create_Objects(Objects, N_Obj);
函数 create_Objects 位于不同的文件“create_Objects.cpp”中,并通过“MainFcn_Mex.h”包含:
#include <stdio.h>
#include <direct.h>
#define _USE_MATH_DEFINES
#include "math.h"
#include <cmath>
#include "mex.h"
#include "matrix.h"
#include <cuda.h>
#include <cuda_runtime.h>
#include "device_launch_parameters.h"
#include "InOut.h"
void create_Objects(sObjects *Objects, int N_Obj);
'create_Objects.cpp'到目前为止的内容是:
#define _USE_MATH_DEFINES
#include "math.h"
#include <cmath>
#include "InOut.h"
#include "mex.h"
void create_Objects(sObjects *Objects, int N_Obj)
{
for (int k=0; k<N_Obj; k++) {
mexPrintf("Objects(%d,1).Type: %s \n", k+1, Objects[k].Type);
}
}
Visual Studio 告诉我:
"错误 C2676: 二进制 '[' : 'sObjects' 未定义此运算符或 转换为预定义运算符可接受的类型"
为什么我可以在主函数中访问数据,而不能在辅助函数中访问数据?
如果在编译时不知道它的大小,我如何在其他函数中访问动态分配的结构?
非常感谢您的宝贵时间!
【问题讨论】:
-
您只向我们展示了部分代码;一方面,你在哪里定义了
Objects?create_Objects和create_OpticsObjects也一样吗?请提供完整的信息,最好使用最少的工作代码。目前问题不是很清楚。 -
抱歉,我混淆了将代码缩减到我认为可能至关重要的部分......我编辑了上面的原始帖子
-
我找到了一个我不理解的可编译的工作解决方案。我会试着总结一下:我用指针创建了像
sObjects *Objects = new sObjects[N_Obj];这样的结构......然后我在循环中分配了结构。如果我传递像create_Objects(sObjects *Objects, int N_Obj);这样的对象,它会起作用。但如果我通过引用传递它就不会 & -
我不确定我是否理解这里的问题。请发布您实际使用的代码以及确切的错误消息...
标签: c++ matlab dynamic struct mex