2 freedom wings5 freedom_wings5 于 2016.04.01 20:26 提问

c语言,没定义同名函数,包含头文件时却说重定义了,请大神看看

头文件EnforceJoseph.h

 #include<stdio.h>
#include<stdlib.h>

struct Node
{
    int password;
    int peopleOfNumber;
    Node *next;
};

Node *first;
Node *last;


//用于遍历约瑟夫环的函数,传入的形参第一个为首地址,第二个是初始上限值
bool Enforce(Node *node, int m)
{
    Node *p = node;
    Node *q = p;
    if ((*p).next == p) return true;
    int i = 0;
    for (; i < m; i++)
    {
        p = (*p).next;
        if (i == 0) continue;
        q = (*q).next;
    }
    m = (*p).password;
    printf("出列的人为:%d", (*p).peopleOfNumber);
    (*q).next = (*p).next;
    free(p);
    Enforce((*q).next, m);
    return true;
}

//建立一个只有一个结点的链表
void setup()
{
    first =(Node *) malloc(sizeof(Node));
    last = first;
    (*last).next = first;
}

//向链表添加数据
void add(int password, int numberOfPeople)
{
    Node *p;
    if (last == first)
    {
        p = first;
    }
    else  p = (Node *)malloc(sizeof(Node));
    (*p).password = password;
    (*p).peopleOfNumber= numberOfPeople;
    (*p).next = first;
    last = p;
}

bool checkIfNull()
{
    Node *q = (*first).next;
    if (((*first).next == first) || (*q).next == first)
        return false;
    else return true;
}

void begin(int m)
{
    Enforce(first, m);
}

下面是包含该头文件的,main函数所在的文件"源.cpp":

 #include<stdio.h>
#include<string.h>
#include "EnforceJoseph.h"


int m;
int pass;
int num;
char yOrN[3];
int main()
{
    void start();
    start();
    system("PAUSE");
}


void start()
{
    void input(int type);
    void check(int type);
    setup();
    input(1);
    input(2);
    input(3);
    check(4);
    begin(m);
}

void input(int type)
{
    void check(int type);
    switch (type)
    {
    case 1:
        printf("请输入m的值\n");
        scanf_s("%d", &m);
        check(1);

        break;
    case 2:
        printf("请输入密码和位置");
        scanf_s("%d %d", &pass, &num);
        check(2);
        add(pass,num);
        break;
    case 3:
        printf("你是否要继续输入?请输入yes或no\n");
        scanf_s("%s", yOrN);
        check(3);
    }
}



void check(int type)
{
    switch (type)
    {
    case 1:
        if (m != (int)m)
        {
            printf("你输入的m值不合要求,请重新输入\n");
            input(1);

        }

    case 2:
        if (pass > m)
        {
            printf("你输入的密码不合要求,重新输入\n");
            input(2);

        }

    case 3:
        if ((strcmp(yOrN, "yes") != 0) && (strcmp(yOrN, "no") != 0))
        {
            printf("请输入yes或no\n");
            input(3);

        }
        else input(2);

        break;
    case 4:
        if (!checkIfNull())
        {
            printf("你建立的链表不合法,请重新建立");
            input(2);

        }

        break;
    }
}

该项目只写了这2个文件。下面上张报错的图:
图片说明

求解决方法

4个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.01 21:35

楼主这是VS2012?我这里可以的

图片说明

建议楼主重新生成一下,或者重新创建个工程试试

YXTS122
YXTS122   2016.04.01 22:57

如果没定义ifndef头文件,就定义define头文件
井ifndef "….h"
井define "….h"
加上这个试下。。。

YXTS122
YXTS122   2016.04.01 23:00

或者把那个同名的函数的函数名另外取个名字试下看行不行

N_Fawkes
N_Fawkes   2016.04.01 23:14

#pragma once 加上这个呢

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!