在头文件中声明字符串返回函数。冲突类型?

时间:2017-06-19 17:22:26

标签: c function declaration

我的头文件中有这个:

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'''& #34;废话?就我所知,它们是完全相同的,我无法在这个主题上找到任何帮助

2 个答案:

答案 0 :(得分:2)

根据错误消息,您的功能定义为:

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

但你宣布它为:

const char * keyBoard();

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

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

答案 1 :(得分:2)

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

const char * keyBoard();

在这种情况下,当调用该函数时,编译器会执行所谓的默认参数提升。 错误消息表示以下内容(6.5.2.2函数调用)

  

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

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

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

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