冲突类型问题

时间:2014-12-18 16:29:51

标签: c

我正在关注the book创建一个简单的C程序,以下代码来自本书:

#include <stdio.h>

int main(int argc, const char * argv[])
{

    congratulateStudent("Kate", "Cocoa", 5);

    return 0;
}

void congratulateStudent(char *student, char *course, int numDays) {
    printf("%s has done as much %s Programming as I could fit into %d days.\n",
           student, course, numDays);
}

我复制后&amp;将上面的代码粘贴到我的XCode上,我收到错误:

Conflicting types for 'congratulateStudent'

我注意到有另一个人有same problem的书代码,我尝试了接受的答案,将代码更改为:

void congratulateStudent(char *student, char *course, int numDays) {
        printf("%s has done as much %s Programming as I could fit into %d days.\n",
               *student, *course, numDays);
    }

但编译错误仍然存​​在,有什么问题?

4 个答案:

答案 0 :(得分:4)

main之前添加一个函数声明:

void congratulateStudent(char *student, char *course, int numDays);

更新1:您也可以在congratulateStudent之前移动main功能。

更新2:您在链接中引用的答案,重点是用户在函数中使用错误的参数类型,而不是他/她打算在char, char, int%s, %s, %d中使用的参数类型。在printf中用于char*, char*, int类型的工作,所以这是不同的。

答案 1 :(得分:3)

这是因为在你的main函数中,congratulateStudent函数尚未声明,并且编译器假定它默认返回int,然后你在下面定义它以返回{{1

void

所以要么在Conflicting types for 'congratulateStudent' 之前声明函数,要么在main之前移动它的定义,两个解决方案都有效。

答案 2 :(得分:0)

试试这个:

#include <stdio.h>

void congratulateStudent(char *student, char *course, int numDays) {
   printf("%s has done as much %s Programming as I could fit into %d days.\n",
       student, course, numDays);
}

int main(int argc, const char * argv[])
{

congratulateStudent("Kate", "Cocoa", 5);

return 0;
}

答案 3 :(得分:0)

您应该确保设置了编译器的警告标志:-Wall -Wextra。这些应该给你一个警告,说明编译器不理解congratulateStudent中的函数main。我的编译器给了我输出

line 6: warning: implicit declaration of function `congratulateStudent'

这些警告可以帮助您找出错误的位置。

并且,要修复警告和错误,我们可以在代码顶部附近添加一个函数原型:

#include <stdio.h>

void congratulateStudent(char *student, char *course, int numDays);

int main(int argc, const char * argv[])
{
...