在下文中,我没有定义类型doesntexist
。
void myfunction(doesntexist argument)
{
}
GCC 4.7.2说“error: variable or field ‘myfunction’ declared void
”
我的问题是这样的:这里的编译器通过什么来引用函数名称为void而不是参数类型?
[修改]
在进行downvoting之前,请注意此问题的答案与错误的顺序和-Wfatal-errors
阻止更直接相关的消息打印有关。这不仅仅是我对一个略微模糊的编译器消息。
答案 0 :(得分:5)
谢谢,@ JoachimPileborg。未经编辑的错误日志不包含任何有用的内容,它应该有!评论引导我解决问题和解决方案...... 从我的makefile中删除-Wfatal-errors
。
19:17 >>> gcc -Wfatal-errors main.c
main.c:2:17: error: variable or field ‘myfunction’ declared void
compilation terminated due to -Wfatal-errors.
并删除-Wfatal-errors
...
19:18 >>> gcc main.c
main.c:2:17: error: variable or field ‘myfunction’ declared void
main.c:2:17: error: ‘doesntexist’ was not declared in this scope
问题解决了。
对于那些首先说“为什么要使用 -Wfatal-errors
的人?”:我通常不希望所有错误作为第一个可以触发其余的。在这种情况下,看起来错误是按顺序给出的,或者至少是以意想不到的顺序给出的 - 我假设编译器会先遇到‘doesntexist’ was not declared
错误。
答案 1 :(得分:2)
当函数参数包含未知类型时,它绝对不是函数为void
类型的问题,可能是g++
编译器错误消息模式。
答案 2 :(得分:1)
您好@jozxyqk需要为参数指定一个类型,如果Coliru中的内容正确代表您的代码,您需要做的是为参数提供有效的数据类型,例如{{ 1}}或void myfunc(string argument)
等。
数据类型here和另一个here有一个不错的资源。可能值得Google搜索how to use data types in c++或类似内容,以便您可以找到一些关于它们及其用法的阅读材料。
Linked here是一个修改后的版本,它将字符串显示为参数的有效数据类型,并显示int参数的重载版本。
如果您需要更多信息,请告诉我们。)