表达式必须是指向完整对象类型的指针,为什么在这种情况下会出现此错误?
Expression must be a pointer to a complete object type, why do I get this error in this situation?
这是我的情况的简化:
header.h
#DEFINE NUMBER 3
extern char reserved[][];
definer.c
char reserved[NUMBER][4] = {"WOW","LOL","K"}
sign.c
#include "header.h"
void theFunctionWithTheError{
if (reserved[1] == "I love Whosebug"){ /**THE LINE OF THE ERROR*/
return;
}
}
在sign.c中,我得到错误Expression must be a pointer to a complete object type
对于单词 reserved
你建议我做什么?
错误消息说你不能有效地使用声明 extern char reserved[][];
因为编译器至少需要数组的第二个维度来知道如何访问数组的部分——所以它需要 extern char reserved[][4];
。通过该声明,很明显 "I love Stack Overflow"
(无论分词和大写)太长而不能等于数组中的任何字符串,但这有点偶然。
你不能像那样有用地比较字符串——你需要使用 strcmp()
。请参阅 How do I check if a value matches a string? and How do I properly compare strings? 以及许多其他可能的 SO 问题。
你有:
if (reserved[1] == "I love Whosebug")
你需要:
if (strcmp(reserved[1]), "I love Stack Overflow") == 0)
或同等学历。使用集合 ==
、!=
、>=
、<=
中的任何 op
显式比较 strcmp(A, B)
与 0
的结果>
或 <
与您从 A op B
获得的结果匹配,如果字符串是 C 中的真实 built-in 类型。
您的代码有问题:
缺少参数列表,即使为空,也必须在函数定义中提供括号;
C 中的字符串比较必须使用函数 strcmp() 来执行。不能对字符串使用 == 运算符。
#include <string.h>
#define NUMBER 3
char reserved[NUMBER][4] = { "WOW", "LOL", "K" };
void theFunctionWithTheError(void){
if (strcmp("I love Whosebug", reserved[1]) == 0)
{
return;
}
}
这是我的情况的简化:
header.h
#DEFINE NUMBER 3
extern char reserved[][];
definer.c
char reserved[NUMBER][4] = {"WOW","LOL","K"}
sign.c
#include "header.h"
void theFunctionWithTheError{
if (reserved[1] == "I love Whosebug"){ /**THE LINE OF THE ERROR*/
return;
}
}
在sign.c中,我得到错误Expression must be a pointer to a complete object type
对于单词 reserved
你建议我做什么?
错误消息说你不能有效地使用声明
extern char reserved[][];
因为编译器至少需要数组的第二个维度来知道如何访问数组的部分——所以它需要extern char reserved[][4];
。通过该声明,很明显"I love Stack Overflow"
(无论分词和大写)太长而不能等于数组中的任何字符串,但这有点偶然。你不能像那样有用地比较字符串——你需要使用
strcmp()
。请参阅 How do I check if a value matches a string? and How do I properly compare strings? 以及许多其他可能的 SO 问题。你有:
if (reserved[1] == "I love Whosebug")
你需要:
if (strcmp(reserved[1]), "I love Stack Overflow") == 0)
或同等学历。使用集合
==
、!=
、>=
、<=
中的任何op
显式比较strcmp(A, B)
与0
的结果>
或<
与您从A op B
获得的结果匹配,如果字符串是 C 中的真实 built-in 类型。
您的代码有问题:
缺少参数列表,即使为空,也必须在函数定义中提供括号;
C 中的字符串比较必须使用函数 strcmp() 来执行。不能对字符串使用 == 运算符。
#include <string.h>
#define NUMBER 3
char reserved[NUMBER][4] = { "WOW", "LOL", "K" };
void theFunctionWithTheError(void){
if (strcmp("I love Whosebug", reserved[1]) == 0)
{
return;
}
}