IntelliSense:“void *”类型的值不能分配给“char *”类型为16的实体

时间:2015-07-20 04:41:00

标签: c++ c fmi

将错误*作为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);

}

2 个答案:

答案 0 :(得分:0)

在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) );

当然,人们应该真正质疑为什么要使用像calloc这样的旧C库函数。如果您实际上正在编译C程序,请尝试告诉编译器它是C而不是C ++。然后没有必要进行铸造。

答案 1 :(得分:0)

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

calloc的返回类型为void *。您必须显式地转换calloc的结果。