nic*_*ick 61 c struct typedef compiler-errors dereference
我已经看到了很多这方面的问题,但是如果没有具体的代码,我会以不同的方式提出问题.有没有一种方法可以轻松确定导致类型不完整的原因?在我的情况下,我正在使用别人的代码,我完全确定我没有正确的标题,但是(因为计算机比人类的眼球更快更好地完成这个东西)有没有办法让编译器说出来,"嘿,你认为你在第34行有X型,但实际上已经失踪了." 错误本身仅在您分配时显示,这不是很有帮助.
Pot*_*ter 46
前几天我看到一个问题,有人通过指定类似的东西无意中使用了不完整的类型struct A.编译器知道这A是一个结构,尽管struct完全未定义,依赖于struct关键字.
这是在C++中,这种用法a是非典型的(事实证明,这可能导致脚射击).在C中,如果你这样做
struct a {
int q;
};
struct A *x;
x->q = 3;
Run Code Online (Sandbox Code Playgroud)
然后你可以使用structtypename并省略struct A后者.如果您输入错误名称或忘记标题,这将导致编译器稍后给您一个未定义的标识符错误,而不是不完整的类型.
Ste*_*sop 10
你是什么意思,错误只会在你分配时显示出来?例如,在海湾合作委员会,没有任何作业:
int main() {
struct blah *b = 0;
*b; // this is line 6
}
Run Code Online (Sandbox Code Playgroud)
incompletetype.c:6: error: dereferencing pointer to incomplete type.
该错误是在第6行,这就是我用了一个不完整的类型,就好像它是一个完整的类型.直到那时我还好.
错误是您应该包含定义类型的任何标头.但是编译器无法猜测应该包含哪一行:函数外的任何行都可以.它也不会拖网浏览你系统上的每个文本文件,寻找定义它的标题,并建议你应该包括它.
或者(好点,potatoswatter),错误是在哪里行b的定义,当你的意思指定某些类型的实际存在,但实际上规定blah.b在大多数情况下,找到变量的定义应该不会太困难.IDE通常可以为您完成,编译器警告可能无法打扰.但是,如果你找不到你正在使用的东西的定义,这是一些非常令人发指的代码.
我不太明白这是什么问题.不完整类型不是"缺失"的类型.Incompete类型是声明但未定义的类型(在结构类型的情况下).要找到非定义声明很容易.至于找到缺少的定义......编译器在这里不会帮助你,因为这是导致错误的原因.
C中不完整类型错误的一个主要原因是类型名称中的拼写错误,这会阻止编译器将一个名称与另一个名称匹配(例如将声明与定义匹配).但同样,编译器无法帮助你.编译器不会猜测错别字.