我正在使用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文件在内的所有内容。
答案 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 ++中无效。