【问题标题】:error: variable or field ‘myfunction’ declared void [duplicate]错误:变量或字段“myfunction”声明为无效[重复]
【发布时间】:2013-11-25 17:56:11
【问题描述】:

下面我没有定义类型doesntexist

void myfunction(doesntexist argument)
{
}

GCC 4.7.2 说“error: variable or field ‘myfunction’ declared void

我的问题是这样的:编译器在这里想到的是什么函数名是 void 而不是参数类型?

[编辑]
在投票之前,请注意此问题的答案与错误的顺序和-Wfatal-errors 停止打印更直接相关的消息有关。这不仅仅是我在尝试一个稍微模糊的编译器消息。

【问题讨论】:

  • 我的 gcc 4.7.2 说“错误:未知类型名称 'doesntexist'”。我认为 SSCCE (sscce.org) 可能是合适的。
  • 请显示 completeunedited 错误日志。
  • @MarkGarcia 如果使用 gcc 编译,您的代码将导致错误,因为这些是 c++ 库。
  • 我之前评论的更新:当我将代码编译为 C 时,我收到了我之前引用的消息;当编译为 C++ 时,代码给出了您引用的错误,后跟 error: 'doesntexist' was not declared in this scope

标签: c++ c gcc compiler-errors


【解决方案1】:

谢谢,@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 错误。

【讨论】:

    【解决方案2】:

    这绝对不是函数为void 类型的问题,可能是g++ 当函数参数包含未知类型时编译器错误消息架构不佳。

    【讨论】:

      【解决方案3】:

      嗨@jozxyqk,您需要为参数指定一个类型,如果您在Coliru 中的内容正确代表您的代码,您需要为参数提供一个有效的数据类型,例如void myfunc(string argument)void myfunc(int argument)

      在数据类型here 和另一个here 上有一个不错的资源。可能值得在Google 搜索how to use data types in c++ 或类似的东西,这样你就可以找到一些关于它们及其用法的阅读材料。

      Linked here 是修改后的版本,它显示字符串作为参数的有效数据类型和 int 参数的重载版本。

      如果您需要更多信息,请告诉我:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-20
        • 1970-01-01
        • 1970-01-01
        • 2014-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-26
        相关资源
        最近更新 更多