eroare: struct nu are niciun membru numit X (Programare, C, Struct, Copac, Arbore Binar)

Shaun1810 a intrebat.
 #include <stdio.h>
 #include <stdlib.h>

 struct treeNode
 {
    *char word;
    int NumberCnt; 
    struct treeNode *rightPTR, *leftPTR; 

 };
 typedef struct treeNode node;

  node *rootPTR = NULL;

 void freeTree(node *currPTR)
 {
     if (currPTR!= NULL)
    {
        freeTree(currPTR -> leftPTR);
        free(currPTR);
        freeTree(currPTR -> rightPTR);
    }
 }

void printTree(node *currPTR)
{
    if (currPTR != NULL)
        {
            printTree(currPTR ->leftPTR);   
            printf("%d
", currPTR->word);
            printTree(currPTR ->rightPTR);  
        }
}



int insertNode (char* input)
{

    node *tempPTR = malloc(sizeof(node));
    tempPTR -> word = input;
    tempPTR -> NumberCnt=0;
    tempPTR -> leftPTR = NULL;
    tempPTR -> rightPTR = NULL;

    if (rootPTR == NULL)
    {   
        rootPTR = tempPTR;
        rootPTR -> NumberCnt++;
    }
     else 
    {
        int comp;
        node *currPTR = rootPTR;
        node *prevPTR = NULL;

            while (currPTR != NULL)
            {
                comp = strcmp(input, (currPTR->word));
                if (comp = 0)
                {
                    printf ("Entry already exists");
                    return 1;   
                }
                else if (comp < 0)
                {
                    prevPTR = currPTR;
                    currPTR = currPTR->leftPTR;
                }
                else if (comp > 0)
                {
                    prevPTR = currPTR;
                    currPTR = currPTR->rightPTR;
                }

            }

        comp = strcmp(input, (prevPTR ->word));
        if (comp < 0)
        {
            prevPTR->leftPTR = tempPTR;

        }

        else if (comp > 0)
        {
            prevPTR->rightPTR = tempPTR;

        }

        return 0;   
    }

    return 2;
}

int search(char* input) 
{
     if (input == rootPTR ->data)
    {
        printf("Node found %d
", rootPTR->data);
        return 0;
    }
    else
    {
        if (input < rootPTR ->data)
            {

                node *currPTR = rootPTR->leftPTR;

                while (currPTR != NULL)
                 {
                    if (input == currPTR->data)
                    {
                        printf("Node found %d
", currPTR->data);
                         return 0;
                     }
                    else if (input < currPTR->data)
                    {
                        currPTR = (currPTR -> leftPTR); 
                    }
                    else if (input > currPTR->data)
                    {
                        currPTR = (currPTR -> rightPTR);
                     } 
                }
                printf ("Node not in tree
");
                return 1;
            }

             if (input > rootPTR ->data)
            {

                node *currPTR = rootPTR->rightPTR;

                while (currPTR != NULL)
                {

                    if (input == currPTR->data)
                    {
                        printf ("Node found %d
", currPTR->data);
                        return 0;
                    }

                    else if (input < currPTR->data)
                    {
                        currPTR = (currPTR -> leftPTR); 
                    } 

                    else if (input > currPTR->data)
                    {
                        currPTR = (currPTR ->rightPTR);
                    }
                }
                printf ("Node not in tree
");
                return 1;
            }

    }

return 2;
}

void fixWord(char* buff)
{
    char* unfixed = buff;
    char* fixed = buff;

    while (*unfixed)
    {

            if (isalpha(*unfixed))
        {
            *fixed=tolower(*unfixed);
                *fixed++;

        }   
            *unfixed++;


    }
    *fixed=0;

}


int main()
{   
    FILE *ptr_file;
    char buff [100];
  //ptr_file = fopen ("sherlock.txt", "r");
    ptr_file = fopen ("input.txt", "r");
    if (!ptr_file)
        printf("File read error");


        while(fscanf(ptr_file, "%s ", buff ) != EOF)
        {
            int comparison = strcmp(buff, "endoffile");
            if (comparison == 0)
            {
                return 0;
            }

             fixWord(buff);
             insert(buff);
        }

    fclose(ptr_file);

}

Am acest cod care este un arbore binar care citește un text dintr-un fișier și apoi îl adaugă la un arbore binar. Am un struct pentru a reprezenta un nou nod care primește un șir de caractere și un număr întreg care se incrementează pentru a arăta numărul de cuvinte. Inițial, am configurat acest arbore pentru a primi numere întregi pentru a testa funcționalitatea arborelui și a funcționat foarte bine, însă de când am actualizat structura pentru a primi șirul de caractere și numărul întreg incrementat, compilatorul se plânge că structura nu mai conține niciunul dintre membrii structurii. Nu am nicio idee de ce se întâmplă acest lucru.

Comentarii

  • „*char word;” ar trebui să fie „char *word.” –  > Por Charlie Burns.
  • rightptr nu este același lucru cu rightPTR. –  > Por Mat.
  • Această întrebare pare a fi în afara subiectului, deoarece este vorba despre simple greșeli de scriere, care nu va ajuta pe nimeni altcineva în viitor. –  > Por Mat.
  • Îmi pare rău că a fost o întrebare proastă, lucrez de la 8 dimineața, mulțumesc că mi-ați rezolvat problema. –  > Por Shaun1810.
2 răspunsuri
Roland Illig

Uitați-vă la primul mesaj de eroare al compilatorului. Acesta ar trebui să se plângă de *char din linia 6, care ar trebui să fie char *.

Apropo: copiați și lipiți întotdeauna mesajele de eroare, astfel încât să obținem mesajele originale.

jpw

Încerci să folosești un membru data ca rootPTR ->data în mai multe locuri din search însă funcția struct treeNode nu are un membru numit data.