C предупреждение конфликтующих типов - PullRequest
5 голосов
/ 12 марта 2010

мой код

void doc(){
          //mycode                
            return;
           }

мое предупреждение

conflicting types for 'doc'

может кто-нибудь решить это.

Ответы [ 8 ]

27 голосов
/ 12 марта 2010

В C, если у вас нет прототипа для функции при вызове, предполагается, что она возвращает int и принимает неопределенное количество параметров.Затем, когда вы позже определите свою функцию как возвращающую void и не принимающую параметров, компилятор видит это как конфликт.

В зависимости от сложности вашего кода, вы можете сделать что-то столь же простое, как перемещение определенияфункции перед ее использованием или добавьте функцию объявление в заголовочный файл и включите ее.

В любом случае, чистый эффект должен состоять в том, чтобы сделать прототип функции доступным до того, как она будетиспользуется.

Если вы добавите

void doc(void);

перед использованием функции, вы увидите прототип, видимый в области видимости, и ваше предупреждение исчезнет.

Я думаюэто наиболее вероятная причина вашего предупреждения.В вашем коде может быть явное несовместимое объявление doc, но мы не можем сказать, потому что вы не опубликовали полный код.

13 голосов
/ 19 мая 2010

попробуйте написать свою функцию документирования перед основной функцией в файле программы.

4 голосов
/ 12 марта 2010

вы объявили его с другим типом / сигнатурой и определили с другим типом / сигнатурой.

как

int doc();
void doc()
{ 
}

выдаст вам это предупреждение.

3 голосов
/ 12 марта 2010

Это явно не ваш полный код.

Однако эта ошибка означает, что существует другое объявление для doc (возможно, глобальная переменная? Что-то в заголовочном файле?), Которое не является void функцией, которая не принимает параметров.

2 голосов
/ 12 марта 2010

Убедитесь, что вы не использовали doc где-либо в вашем коде!, Я думаю, что это только доставляет вам неприятности!

2 голосов
/ 12 марта 2010

Вы либо объявили doc ранее, либо сделали вызов undeclared doc, что вынудило компилятор вывести вероятное объявление параметра для doc из этого вызова. Теперь определение doc, которое вы цитировали, отличается от предыдущего объявления (либо явного, либо выводимого компилятором), которое называется «конфликтом».

2 голосов
/ 12 марта 2010

"doc", вероятно, уже объявлен с другим типом ... Вы должны попытаться найти предыдущую декларацию!

0 голосов
/ 11 октября 2014

Объявление функции выше использования решило ее для меня.

Пример:

void recordAudio(){  //declaration 

    doStuff();
}


void initialise(){ 

    recordAudio();    // usage
}

Как вы можете видеть выше, использование recordAudio() выше, где используется.

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