我得到的错误让我在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();
}
答案 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;
...