语法错误,返回类型也错误


struct zhanghu
{
    char name[20];
    char zhanghu[20];
    char mima[20];
};

error C2059;error C2380
语法错误,"zhanghu"前的类型(构造函数有返回类型或是当前类型名称的非法重定义)

你的问题是这样的,你定义了一个结构体叫zhanghu对吧。
然后结构体中的一个成员变量也叫zhanghu,虽然是个数组。
但是编译器就懵逼了。当你提到zhanghu的时候,到底指的是结构体的账户,还是结构体里char数组的zhanghu?因此报错。
后面的一系列报错你可以先把这个问题解决掉,不出意外就会消失,因为可能是struct定义失败,导致后面的代码找不到struct zhanghu而报错。
希望对你有所帮助~望采纳!

看看你完整的代码,前面是不是少分号,或者是重复定义


#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct zhanghu
{
    char name[20];
    char zhanghao[20];
    char mima[20];
};

int zhuce(struct zhanghu zh[],int m);
void denglu(struct zhanghu zh[],int m);
void menu(void);
void again(struct zhanghu zh[], char l[]);

int main(void)
{
    int m=0;
    int k;
    struct zhanghu zh[100];
    while(1)
    {
        menu();
        scanf("%d",&k);
        switch(k)
        {
        case 1:
            zhuce(zh,m);
            m++;
            printf("%d\n\n",m);
            break;
        case 2:
            denglu(zh,m);
            break;
        case 3:
            printf("谢谢使用!\n");
            exit(0);

        default:
            printf("不存在该服务!");
            break;
        }
    }
    return 0;
}

void menu(void)
{
    printf("\n      ******************菜单******************\n");
            printf("\t\t*\t       ①注册                   *\n");
            printf("\t\t*\t       ②登录                   *\n");
            printf("\t\t*\t       ③退出系统               *\n");
            printf("       *****************************************\n");
            printf("\n");
            printf("\t\t[请选择服务器]\t\b\b\b");
}

int zhuce(struct zhanghu zh[],int m)
{
    char d[20],e[20],l[20];
    int i;
    printf("用户名:");
    scanf("%s",&l);
    again(zh,l);
    printf("账户:");
    scanf("%s",&d);
    printf("请输入六位密码:");
    scanf("%s",&e);
    i=strlen(e);
    if(i!=6)
    {    printf("密码形式错误,请重新创建\n");
     printf("用户名:");
     scanf("%s",&l);
     printf("账户:");
    scanf("%s",&d);
    printf("请输入六位密码:");
    scanf("%s",&e);
    }
    printf("\n");
    strcpy(zh[m].name,l);
    strcpy(zh[m].zhanghao,d);
    strcpy(zh[m].mima,e);
    printf("创建成功!\n");
    printf("密码:%s\n账户:%s\n",zh[m].mima,zh[m].zhanghao);
    m++;
    return m;
}

void denglu(struct zhanghu zh[], int m)
{
    int g,f,i;
    char d[20],e[20],n[20];
    printf("用户名:");
    scanf("%s",&n);
    printf("账号:");
    scanf("%s",&d);
    printf("密码:");
    scanf("%s",&e);
    printf("\n");

    for(i=0;i<99;i++)
    {
        if(strcmp(zh[i].name,n)==0)
        {
            g=strcmp(zh[i].zhanghao,d);
            f=strcmp(zh[i].mima,e);
            if((g==0)&&(f==0))
            {
                printf("%s,欢迎回来!\n\n",zh[i].name);
            }
            else
            {
                printf("账号或密码错误!\n\n");
            }
        }
    }
}


错误 1 error LNK2019: 无法解析的外部符号 "void __cdecl again(struct zhanghu * const,char * const)" (?again@@YAXQAUzhanghu@@QAD@Z),该符号在函数 "int __cdecl zhuce(struct zhanghu * const,int)" (?zhuce@@YAHQAUzhanghu@@H@Z) 中被引用 d:\documents\visual studio 2010\Projects\hsrsx1\hsrsx1\111.obj hsrsx1
出现新的错误这是什么原因呢