Получение ошибки "присваивание делает указатель из целого числа без приведения" - PullRequest
0 голосов
/ 28 сентября 2018
Cmd* GetCommand() {
            Cmd* command;
            char* cmdStr = getIn();
            command = parseL(cmdStr);
            return command;
   }

Cmd** parseL(char* str){
        Cmd** command;
        char* token;
        char str2[CMD_MAX_LINE_LENGTH];
        strcpy(str2, str);
        token = strtok(str2, DELI);
        command = ParC(token);
        return command;
}

Cmd* parC(char* cmdStr) {
    Cmd* command = calloc(1, sizeof(CmdCommand));
        if (cmdStr == NULL) {
            command->cmd = INVALID;
            return command;
        }
        else
            parse2C(cmdStr, command);
        return command;
    }

Эй, я новичок в C и у меня проблема с кодом.

Когда я запускаю эту часть кода, я получаю сообщение об ошибке:

assignment makes pointer from integer without a cast.

для этой строки:

             command = parseL(cmdStr);

command относится к типу Cmd*, а также функция parseL возвращает Cmd*, поэтому я не могу найти проблему.

1 Ответ

0 голосов
/ 28 сентября 2018

В тот момент, когда компилятор видит

 command = parseL(cmdStr);

, он еще не знает, какой тип возвращается parseL(), как это определено позже в коде.

Для таких случаев Стандарт C определяет , что многие компиляторы принимают int в качестве возвращаемого типа.

Поскольку command определен как указатель, компилятор блокирует и выдает наблюдаемое предупреждение:

error assignment makes pointer from integer without a cast

Чтобы обойти эту проблему

  • либо определите всю функцию
  • или как минимум , предоставьтеПрототип функции

    Cmd** parseL(char*);
    

до используется.


В качестве примечания:

Вы столкнетесь с следующей ошибкой, тогда как Cmd** отличается от Cmd*.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...