标头和未声明变量中的C冲突类型?

时间:2017-02-24 18:05:21

标签: c function types header

我收到了错误:

  

复杂'的冲突类型。(complex.h的第4行)复杂'的前一个声明。曾在这里。 (complex.h的第4行)

并且

  

num1,num2和ans未声明。 (首次使用此功能)

在主程序中。

#include <stdio.h>

#include "boolean.h"
#include "complex.h"
#include "complex_IO.h"
#include "complex_Arith.h"


int main (void){
    boolean quit=FALSE;
    boolean showmenu=TRUE;
    int menu_sel;
    while (!quit){
            if (showmenu){
                    printf("1 Add.\n");
                    printf("2 Subtract.\n");
                    printf("3 Multiply.\n");
                    printf("4 Conjugate.\n");
                    printf("5 Negate.\n");
                    printf("6 Toggle Menu.\n");
                    printf("7 Quit.\n");
                    printf("Enter Selection:");
                    scanf("%d",&menu_sel);
            }
            else{
                    printf("Enter Selection (4 to turn menu on):");
                    scanf("%d",&menu_sel);
            }
            switch (menu_sel){

                case 1: num1=Read_Complex();
                        num2=Read_Complex();
                        ans=Add_Complex(num1,num2);
                        Write_Complex(ans);
                        break;
                case 2: num1=Read_Complex();
                        num2=Read_Complex();
                        ans=Subtract_Complex(num1,num2);
                        Write_Complex(ans);
                        break;
                case 3: num1=Read_Complex();
                        num2=Read_Complex();
                        ans=Multiply_Complex(num1,num2);
                        Write_Complex(ans);
                        break;
                case 4: num1=Read_Complex();
                        num2=Read_Complex();
                        ans=Conjugate_Complex(num1);
                        Write_Complex(ans);
                        break;
                case 5: num1=Read_Complex();
                        num2=Read_Complex();
                        ans=Negate_Complex(num1);
                        Write_Complex(ans);
                        break;
                case 6: showmenu=!showmenu;
                        break;
                case 7: quit=TRUE;
                        break;
                default: printf("%d is not a valid option.\n", menu_sel);
            }
    }
}

我不知道是否需要所有的头文件,但这里有复杂的情况。

typedef struct {
    int real;
    int img;
} complex;

2 个答案:

答案 0 :(得分:3)

complex.h中(我假设这是一个自定义标题,而不是官方标题),您需要添加标题保护。这可以防止complex_IO.hcomplex_Arith.h两次处理它。请阅读here以获取更多信息。

/* complex.h */
#ifndef COMPLEX_H_INCLUDED__
#define COMPLEX_H_INCLUDED__

typedef struct {
    int real;
    int img;
} complex;

#endif

此外,您应该将其重命名(或直接指向它在文件系统中的位置),因为它already exists作为标准标题。

对于您的其他错误,变量未在程序中定义,从而导致编译错误。

答案 1 :(得分:2)

关于第二个错误:

  

num1,num2和ans未声明。 (首次使用此功能)

这些变量根本没有在任何地方声明。

你应该在main

的开头声明它们
int main (void){
    boolean quit=FALSE;
    boolean showmenu=TRUE;
    int menu_sel;

    complex num1, num2, ans;   // <<<<<<<<<<<<<<
    ...