如何调用具有参数的函数,该参数是指向结构和未指定大小的指针数组的指针

时间:2016-01-08 23:06:52

标签: c++ c pointers

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

我在c ++ / CLI项目中重用了一些c代码,我收到了编译错误。 所有文件都在同一个项目中,并且所有正文文件都没有使用预编译的标题

我尽量不编辑重复使用的代码,如果可能的话...... 这是一个代码示例,注意libFunc.h和.c是重用的代码,我正在编写wrapper.cpp:

QPixmap test = imageLabel->pixmap()

我收到错误:

void ImageViewer::save()
{
    QImage test = imageLabel->pixmap();
    qWarning()<< test;
    QByteArray bytes;
    QBuffer buffer(&bytes);
    buffer.open(QIODevice::WriteOnly);
    image.save(&buffer, "BMP");
    QString monobitmap = QString::fromLatin1(bytes.toBase64().data());
}   

我试过了:

// 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 *(*)[].

如何传递它会接受的内容?

代码不必编译为c ++
此问题的任何解决方案都必须在Visual Studio 2013中使用Visual Studio 2010编译器,并且通过&#34; work&#34;我的意思是&#34;构建解决方案&#34;必须构建包括这些c文件在内的所有内容。

1 个答案:

答案 0 :(得分:2)

有人说C是C ++的子集。这是不正确的。正确的是,存在两种语言共有的子集。您正在遇到C语言中不支持的C方面之一。

由于这是C ++不支持的,因此任何答案的质量都可疑。也就是说,这是一个可疑质量的答案:只需将&myVar转换为指向myStruct指针数组的指针:

libFunc((myStruct*(*)[])&myVar);

这编译干净。无论它是&#34;是否有效,这是一个不同的问题。在这个问题中有一条评论让我觉得这不起作用:

void libFunc(myStruct *(*arg)[]){ // does stuff, sets arg

如果该功能确实 set arg (而不是 sets contents of arg ),那么C ++中根本不支持这种功能。


旁白:为什么该函数会指向指向myStruct的指针数组?您还没有显示该代码的正文。我不知道设置*arg在C中是否有效,但它在C ++中无效。