它不编译,我不知道我在做什么错。当我尝试做时:

(ultimo->siguiente)=nnodo;


编译器不允许我这样做。都不起作用:

scanf("%d", &(nnodo->dni));


PD:baja和modif函数仍然没有完成,但它们不应与主程序发生任何冲突。



编译器输出(Visual Studio 2010):

错误2错误C2037:'siguiente'的左边指定了未定义的结构/联合'stru'c:\ documents and settings \ emiliano \ desktop \ asdc.c 52 1 abm

错误3错误C2037:'dni'的左侧指定了未定义的结构/联合'stru'c:\ documents and settings \ emiliano \ desktop \ asdc.c 55 1 abm

4 IntelliSense:不允许指向不完整类类型的指针c:\ documents and settings \ emiliano \ desktop \ asdc.c 52 3 abm

5 IntelliSense:不允许指向不完整类类型的指针c:\ documents and settings \ emiliano \ desktop \ asdc.c 55 15 abm



我认为我正确地执行了typedef,但是我真的不知道。

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

typedef struct stru* pstru;

typedef struct{
    int dni;
    pstru siguiente;
}stru;



pstru alta(pstru ultimo);
pstru baja(pstru ultimo);
pstru modif(pstru ultimo);
int menu(pstru ultimo);

int main(){
    pstru ultimo;
    ultimo=(pstru)malloc(sizeof(stru));

    menu(ultimo);
    return 0;
}

int menu(pstru ultimo){

    int opc;
    printf("Para alta (1), para baja (2), para modif (3), para salir (4)\n");
    scanf("%d", &opc);

    switch(opc){
        case 1:
            ultimo=alta(ultimo);
            break;
        case 2:
            ultimo=baja(ultimo);
            break;
        case 3:
            ultimo=modif(ultimo);
            break;
        case 4:
            return 0;
    }
    menu(ultimo);
    return 0;
}

pstru alta(pstru* ultimo){
    pstru nnodo;
    nnodo=(pstru)malloc(sizeof(stru));
    (ultimo->siguiente)=&nnodo;

    printf("Ingrese DNI\n");
    scanf("%d", &(nnodo->dni));

    ultimo=nnodo;

    return ultimo;
}

pstru baja(pstru ultimo){
    return ultimo;
}

pstru modif(pstru ultimo){
    return ultimo;
}

最佳答案

在C语言中,您无法执行以下操作:

typedef struct stru* pstru;

typedef struct
{
    int dni;
    pstru siguiente;
} stru;


您已经定义了一个未标记的结构类型并将其命名为stru,但是typedef struct stru *pstru;引用了另一种标记的结构类型struct stru,这是不完整的。

您可能需要:

typedef struct stru *pstru;

typedef struct stru
{
    int dni;
    pstru siguiente;
} stru;


这应该编译没有问题。



在C ++中,您不需要第二个typedef。您可以简单地写:

typedef struct stru *pstru;

struct stru
{
    int dni;
    pstru siguiente;
};


并且将定义类型stru

10-07 16:29