【问题标题】:Declaring a string returning function in a header file. Conflicting Types?在头文件中声明一个字符串返回函数。冲突类型?
【发布时间】:2017-06-19 17:22:26
【问题描述】:

我的头文件中有这个:

const char * keyBoard();

在我的一个 C 文件中,函数是这样的:

const char * keyboard() 
{
     //mycode
     return string;
}

我的编译器出现此错误:

 error: conflicting types for 'keyBoard'  
 const char * keyBoard(char hintTxt[30], int maxNumbers, bool multiLine)  
....................^~~~~~~~  
note: an argument type that has a default promotion can't match an empty parameter name list declaration  
 {  
 ^  
(in header file) note: previous declaration of 'keyBoard' was here  
 const char * keyBoard();  
....................^~~~~~~~

我不关心中间部分,因为我不知道它现在是否重要,但是整个“'keyBoard' 的冲突类型”废话是什么?据我所知,它们完全相同,我在这个主题上找不到任何帮助

【问题讨论】:

  • what is with the whole "conflicting types for 'keyBoard'" crap..这是 废话 因为你的代码,不要责怪编译器。
  • 错误信息与您的代码不匹配
  • @FelixPalmen 或者更确切地说,这里的代码显示
  • 顺便说一句 - keyBoard != keyboard.

标签: c function declaration


【解决方案1】:

根据报错信息,你的函数定义为:

const char * keyBoard(char hintTxt[30], int maxNumbers, bool multiLine)

但你将其声明为:

const char * keyBoard();

这些不匹配。声明必须与定义匹配:

const char * keyBoard(char hintTxt[30], int maxNumbers, bool multiLine);

【讨论】:

  • 在我的头文件中我也有这样的函数: int games();整数工具();但在其余代码中,它们是:int games(char userDir[30]) 和 int tools(char userDir[30]) 为什么这些工具在不匹配定义的情况下工作
  • 它们也不匹配,但是因为它们只有一个参数,编译器的抱怨略少。打开警告,例如gcc -Wall,你会得到很多。
【解决方案2】:

你声明的函数没有原型,参数的数量和类型未知

const char * keyBoard();

在这种情况下,当调用函数时,编译器会执行所谓的默认参数提升。 并且错误信息的含义如下(6.5.2.2 函数调用)

6 如果表示被调用函数的表达式具有 不包括原型,整数提升在 每个参数和具有浮点类型的参数都被提升为 双倍的。 这些被称为默认参数提升....

您应该在调用它之前声明指定其参数的函数。

const char * keyBoard(char hintTxt[30], int maxNumbers, bool multiLine);

考虑到声明不需要匹配函数定义。你可以声明一个没有参数的函数。但在这种情况下,您必须考虑 默认参数提升

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 2015-04-05
    • 2014-08-05
    • 1970-01-01
    • 2012-09-24
    • 2013-07-05
    相关资源
    最近更新 更多