通过引用传递,不同基类型的错误

时间:2012-01-27 19:52:56

标签: c visual-studio reference

我得到的错误让我在C程序中感到非常沮丧。

错误是:

main.c(65): error C2371: 'extractVals' : redefinition; different basic types

directClass假设使用变量s接受对char的引用,特别是第20行(在switch case'g'中)。我不确定它们是如何不是相同的基本类型,但我对C不是很好,所以我不能很好地识别所有问题。任何帮助都会很棒。

#include <gl\glew.h>
#include <gl\freeglut.h>
#include <gl\GLU.h>
#include <stdio.h>

void directFile(char input[100]){
    char switchVal [10] , *s = switchVal;
    float val1, val2, val3, val4;

    s = strtok(input, " \n\0");

    printf("Told str is %s\n", s);
    switch(*s){

        case '#':
            printf("%s is a comment. Has no bearing on application\n", s);
            break;
        case 'g':
            printf("%s is the command to translate an object!\n", s);
            extractVals(s);
            break;
        case 's':
            printf("%s is the command to scale, now which one is it?\n",s);
            break;
        case 'r':
            printf("%s will rotate the image!\n",s);
            break;
        case 'c':
            if(strcmp(s , "cone") == 0){
                printf("It appears you have your self a %s\n", s);
            } else if (strcmp(s , "cube") == 0){
                printf("%s is cool too\n" , s);
            } else if (*s == 'c'){
                printf("Welp command was \"%s\", lets change some colors huh?\n",s);
            }
            break;
        case 't':
            break;
        case 'o':
            break;
        case 'f':
            break;
        case 'm':
            break;
    }
}

void extractVals(char *input){
    while(input != NULL){
        printf("%s\n", input);
        input = strtok(NULL, " ,");
    }

}

void makeLower(char *input)
{
    while (*input != '\0')
    {
        *input = tolower(*input);
        input++;
    }
}


int main(int argc, char *argv[]) {
    FILE *file = fopen(argv[1], "r");
    char linebyline [50], *lineStr = linebyline;
    char test;

    glutInit(&argc, argv);

    while(!feof(file) && file != NULL){
        fgets(lineStr , 50, file);
        makeLower(lineStr);
        printf("%s",lineStr);

        directFile(lineStr);

    }
    fclose(file);


    glutMainLoop();
}

2 个答案:

答案 0 :(得分:3)

您的错误是因为您在调用extractVals()之前未提供原型。当编译器遇到这种情况时,它假定该函数声明为:

int extractVals();

然后,当它找到定义时,它与此假设冲突。可以通过在directFile()之前添加适当的原型或在包含的标题中修复此错误:

void extractVals(char *input);

答案 1 :(得分:0)

我认为编译器很困惑,因为它第一次看到函数extractVals在函数directFile中。编译器最有可能假设函数是(int)blah(char *)。然后,当它归结为函数的定义时,它会有所不同,然后编译器会抛出错误。虽然我认为这会重新定义函数错误而不是基本类型。

无论哪种方式尝试在文件顶部添加函数原型

void extractVals(char *input); // I let the compiler know that a function with this signature is coming later

void directFile(char input[100]){
char switchVal [10] , *s = switchVal;
float val1, val2, val3, val4;
...