我想要做的功能刪除擴展的名稱是類型wchar_t或字符,裏面的()我投射void指針類型wchar_t或字符,然後出現錯誤:表達式必須是一個指向一個完整的對象類型時投射void pointer
Expression must be a pointer to a complete object type.
以下是用於顯示問題實例本身的示例代碼。
int RemoveExtension(
void *p_str, /* Name */
bool isWchar /* true:wchar_t, false:char */
) {
int ii, len;
// Get length
len = (isWchar) ? wcslen((wchar_t *)p_str) : strlen((char *)p_str);
// Remove extension
/* wchar_t */
if(isWchar) {
for(ii = 0; ii < len; ii++) {
if(L'.' == (wchar_t *)p_str[ii]) { //Error here
(wchar_t *)p_str[ii] = L'\0'; //Error here
break;
}
}
}
/* char */
else {
for(ii = 0; ii < len; ii++) {
if('.' == (char *)p_str[ii]) { //Error here
(char *)p_str[ii] = '\0'; //Error here
break;
}
}
}
return 0;
}
我不明白這個錯誤想說什麼。這裏沒有對象或結構。
'(wchar_t的*)p_str [II]' - > '((wchar_t *)p_str)[ii]' - 參見http://en.cppreference.com/w/c/language/operator_precedence –
「*這裏沒有對象或結構。*」< - 有。無論你的'void *'指向的是C中的*對象*。但'void'是一個不完整的類型,所以你的編譯器不知道它的大小,因此不能進行索引。索引的優先級高於演員。首先使用派生類型轉換爲完整類型,然後編制索引。 –
@FelixPalmen:我明白。非常感謝你。究竟!!! – Oosutsuke