В parseFunc (), если я вызываю loadFunc (), передавая & tIpArray, он прекрасно компилируется при использовании C в качестве компиляции (в onlinegdb.com), но жалуется, как показано ниже, в более поздней версии компилятора C (gcc-bin / 4.9. 4 / gcc) на работе.
Ошибка на работе похожа на ту, что я вижу при компиляции при использовании языка C ++ в onlinegdb. Может кто-нибудь сказать мне, почему компилятору C 4.9.4 gcc не нравится & и как правильно это сделать?
/******************************************************************************
Welcome to GDB Online.
GDB online is an online compiler and debugger tool for C, C++, Python, PHP, Ruby,
C#, VB, Perl, Swift, Prolog, Javascript, Pascal, HTML, CSS, JS
Code, Compile, Run and Debug online from anywhere in world.
*******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
typedef struct _MyStruct
{
char string[72];
}MyStruct;
int loadFunc(MyStruct** ipData, int counter)
{
MyStruct **currentVal = ipData;
MyStruct *ipPtr = NULL;
printf("%p\n", currentVal);
for(int i=0; i<counter; i++)
{
ipPtr = currentVal[i];
printf("Line-%d - %s - %p\n", i+1, ipPtr->string, ipPtr);
}
}
int parseFunc()
{
MyStruct* tIPArray[3];
for(int i=0; i< 3; i++)
{
tIPArray[i] = 0;
tIPArray[i] = (MyStruct*) calloc(1, sizeof(MyStruct));
snprintf(tIPArray[i]->string, 72, "Test-String-%d", i+101);
}
for(int i=0; i<3; i++)
{
printf("Line-%d %p-%p- %s\n", i+1, &tIPArray[i], tIPArray[i], tIPArray[i]->string);
}
// call the load/ print loadFunc
loadFunc(&tIPArray, 3);
}
int main()
{
printf("Hello World\n");
parseFunc();
return 0;
}
Ниже приведена ошибка, которую я получаю на работе
error: passing argument 1 of 'loadFunc' from incompatible pointer type [-Werror]
loadFunc(&tIPArray, 3);
note: expected 'struct MyStruct **' but argument is of type 'struct MyStruct * (*)[(sizetype)((int)((short unsigned int)getMaxAddressObjects() / 4u))]'
int loadFunc(MyStruct **ipData, int counter)
Ниже приведена ошибка при построении этого в onlinegdb.com в виде файла C ++
main.cpp: In function ‘int parseFunc()’:
main.cpp:49:38: error: cannot convert ‘MyStruct * (*)[3] {aka MyStruct * (*)[3]}’ to ‘MyStruct ** {aka MyStruct **}’ for argument ‘1’ to ‘int loadFunc(MyStruct **, int)’
loadFunc(&tIPArray, 3);