IntelliSense: значение типа & quot; void * & quot; не может быть назначен объекту типа «char *» 16

Получение ошибки как void * не может быть присвоено объекту типа char * 16
что нужно сделать, чтобы устранить ошибку. Проблема есть в xmlpath и dllPath

 void fmuLoad() {
char* fmuPath;
char tmpPath[1000]="W:\\Prajwal\\GM_FMU_EXTRACT\\";
char* xmlPath;
char* dllPath;
const char *modelId;
FMU fmu;

fmuUnzip();
// parse tmpPath\modelDescription.xml
xmlPath = calloc(sizeof(char), strlen(tmpPath) + strlen(XML_FILE) + 1);
sprintf(xmlPath, "%s%s", tmpPath, XML_FILE);
fmu.modelDescription = parse(xmlPath);
free(xmlPath);
if (!fmu.modelDescription) exit(EXIT_FAILURE);
//printf(fmu.modelDescription);
#ifdef FMI_COSIMULATION
modelId = getAttributeValue((Element*)getCoSimulation(fmu.modelDescription),att_modelIdentifier);

//#else // FMI_MODEL_EXCHANGE
//  modelId = getAttributeValue((Element *)getModelExchange(fmu.modelDescription), att_modelIdentifier);
#endif
// load the FMU dll
dllPath = calloc(sizeof(char), strlen(tmpPath) + strlen(DLL_DIR) + strlen(modelId) +  strlen(".dll") + 1);
sprintf(dllPath, "%s%s%s.dll", tmpPath, DLL_DIR, modelId);
if (!loadDll(dllPath, &fmu)) {
exit(EXIT_FAILURE);
}
//  free(dllPath);
//  free(fmuPath);
//  free(tmpPath);

}

-4

Решение

В C ++ приведение требуется для назначения пустого указателя.

xmlPath = (char*)calloc(sizeof(char), strlen(tmpPath) + strlen(XML_FILE) + 1);

Или, используя стиль C ++:

xmlPath = static_cast<char*>( calloc(sizeof(char), strlen(tmpPath) + strlen(XML_FILE) + 1) );

Конечно, нужно задаться вопросом, почему вы используете старые функции библиотеки C, такие как calloc совсем. Если вы на самом деле компилируете программу на C, попробуйте сообщить компилятору, что это C, а не C ++. Тогда кастинг не нужен.

0

Другие решения

static_cast<char*>(calloc(sizeof(char), strlen(tmpPath) + strlen(DLL_DIR) + strlen(modelId) +  strlen(".dll") + 1));

возвращаемый тип calloc void *. Вы должны явно привести результат calloc.

0

По вопросам рекламы [email protected]