C++ 如果一个函数的参数是指向指向结构的指针数组的指针,且其大小未指定,如何调用该函数

C++ 如果一个函数的参数是指向指向结构的指针数组的指针,且其大小未指定,如何调用该函数,c++,c,pointers,C++,C,Pointers,我正在使用visual studio 2013和visual studio 2010编译器 我在我的c++/CLI项目中重新使用了一些c代码,并且出现了编译错误。 所有的文件都在同一个项目中,并且所有的主体文件都没有使用预编译的头文件 我正在尝试不编辑重复使用的代码,如果可能的话… 下面是代码示例,请注意libFunc.h和.c是重复使用的代码,我正在编写wrapper.cpp: // libFunc.h typedef struct { double max; double v

我正在使用visual studio 2013和visual studio 2010编译器

我在我的c++/CLI项目中重新使用了一些c代码,并且出现了编译错误。 所有的文件都在同一个项目中,并且所有的主体文件都没有使用预编译的头文件

我正在尝试不编辑重复使用的代码,如果可能的话…
下面是代码示例,请注意libFunc.h和.c是重复使用的代码,我正在编写wrapper.cpp:

// libFunc.h
typedef struct
{
    double max;
    double var;
} myStruct;

void libFunc(char * filename, myStruct *(*arg)[]);
void readVals(char * filename, myStruct *(*arg)[]);
void assignVals(myStruct *arg, char vals[][1024]);

// libFunc.c
void libFunc(char * filename, myStruct *(*arg)[])
{
    readVals(filename, arg);
}

void readVals(char * filename, myStruct *(*arg)[])
{
    char vals[15][1024];
    char *line = (char *) malloc(1024);
    s = fopen(filename, "r");
    while(fgets(line, 1024, s) != NULL)
    {
        // parse tokens into vals
        assignVals((*arg)[index], vals);
    }
}

void assignVals(myStruct *arg, char vals[][1024])
{
    arg->max = atof(values[0]);
    arg->var = atof(values[1]);
}

// wrapper.cpp
#include "libFunc.h"

int wrapper()
{
    myStruct *myVar[1];
    char filename[512];

    strcpy(filename, "input.txt");

    libFunc(filename, &myVar);
}
我得到一个错误:

cannot convert myStruct *(*)[1] to myStruct *(*)[].
我试过:

myStruct ** myVar = new myStruct*[1];
libFunc(&myVar);
这导致了以下错误:

cannot convert myStruct *** to myStruct *(*)[].
我如何传递它将接受的内容

代码不必编译为c++

这个问题的任何解决方案都必须在VisualStudio 2013中使用VisualStudio 2010编译器来执行,而“工作”是指“构建解决方案”必须构建包括这些C文件在内的所有东西。

P>有些人说C是C++的子集。这是不正确的。正确的是,存在两种语言共有的子集。您正在运行C++中不支持的C方面的其中一个方面。

因为这是C++中不支持的东西,任何答案都是可疑的质量。也就是说,这里有一个质量可疑的答案:只需将您的

&myVar
转换为指向指向
myStruct
的指针数组的指针:

libFunc((myStruct*(*)[])&myVar);
这编译得很干净。它是否“有效”,这是另一个问题。问题中有一条评论让我觉得这行不通:

如果该函数确实是<强> <代码>设置ARG (与>Cord>集合的ARG >),这是C++中不完全支持的。



旁白:为什么该函数会使用指向
myStruct
的指针数组的指针?您还没有显示该代码的主体。我不知道C++中的设置<代码> *ARG< /C>是有效的,但是它在C++中是无效的。

我认为你不能从C++调用这个函数。只有C允许指针指向未指定的绑定数组。你需要重新设计函数接口C或C++——你的选择-决定一个可能的副本可以写<代码> LBFUNC((MyStReT*(*)[])和A);代码>。它可能会起作用,但我认为这是形式上未定义的行为。@ChrisBeck看起来不像是它的复制品,它设置了内容。我更新了这个问题,以显示关于这些函数的更多细节
void libFunc(myStruct *(*arg)[]){ // does stuff, sets arg