1. ホーム
  2. c

[解決済み] error: struct has no member named X

2022-01-26 17:52:26

質問

 #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\n", 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\n", rootPTR->data);
        return 0;
    }
    else
    {
        if (input < rootPTR ->data)
            {

                node *currPTR = rootPTR->leftPTR;

                while (currPTR != NULL)
                 {
                    if (input == currPTR->data)
                    {
                        printf("Node found %d\n", 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\n");
                return 1;
            }

             if (input > rootPTR ->data)
            {

                node *currPTR = rootPTR->rightPTR;

                while (currPTR != NULL)
                {

                    if (input == currPTR->data)
                    {
                        printf ("Node found %d\n", 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\n");
                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);

}

このコードは、ファイルからテキストを読み込み、それをバイナリツリーに追加するものです。新しいノードを表す構造体には、文字列と、ワード数を示す整数を取り込みます。しかし、文字列と増分された整数を受け取るように構造体を更新して以来、コンパイラから構造体のメンバが含まれていないとの苦情が寄せられるようになりました。なぜこのようなことが起こるのか、まったくわかりません。

どうすればいいですか?

をご覧ください。 まず のエラーメッセージが表示されます。このエラーメッセージは *char であるべきですが、6行目では char * .

ちなみに、エラーメッセージは必ずコピー&ペーストして、元のメッセージを入手するようにしてください。