none
Неоднозначное поведение компилятора Visual C++ 2010 EE. RRS feed

  • Вопрос

  • Всем привет! 

    Писал себе спокойно энный класс, но не подключал его к работе, т.е. написал class.h и class.cpp, в котором забыл реализовать одну функцию (load, например). Скомпилировал, ошибка (не удивительно). Ок, исправил, подключил в главный файл, в нем задействовал этот класс, линковщик заругался на конструктор, который как раз и вызывал функцию load (неразрешенный символ). Несколько раз пересмотрел - все на месте! Попробовал опять - ошибка магическим образом исчезла. 

    Кто может объяснить причины такого дурного поведения компилятора?! Я не могу нормально продолжать, не зная причину ошибки!

    Всем спасибо!

    PS Проект не использует .NET, только чистый C++, без сторонних фреймворков.
    • Изменено Funnerman 29 апреля 2012 г. 19:47 Добавка
    29 апреля 2012 г. 19:46

Ответы

  • Вообще-то компилятор (и линковщик) не должны были ругнуться вот в этот момент:

    >> забыл реализовать одну функцию (load, например). Скомпилировал, ошибка (не удивительно).

    Возможно, у вас нестандартная настройка сохранения файлов при сборке проекта: в Options/Project and Solutions/Build and Run/Before building стоит что-то кроме Save All Changes, и вы просто забыли сохранить class.cpp перед билдом. Или нашли какой-то очень редкий баг, когда комипляция запустилась до того, как отработало сохранение. Попробуйте воспроизвести, если не получится - расслабьтесь и продолжайте работать :)

    • Помечено в качестве ответа Abolmasov Dmitry 2 мая 2012 г. 8:50
    30 апреля 2012 г. 11:37
    Модератор

Все ответы

  • Вообще-то компилятор (и линковщик) не должны были ругнуться вот в этот момент:

    >> забыл реализовать одну функцию (load, например). Скомпилировал, ошибка (не удивительно).

    Возможно, у вас нестандартная настройка сохранения файлов при сборке проекта: в Options/Project and Solutions/Build and Run/Before building стоит что-то кроме Save All Changes, и вы просто забыли сохранить class.cpp перед билдом. Или нашли какой-то очень редкий баг, когда комипляция запустилась до того, как отработало сохранение. Попробуйте воспроизвести, если не получится - расслабьтесь и продолжайте работать :)

    • Помечено в качестве ответа Abolmasov Dmitry 2 мая 2012 г. 8:50
    30 апреля 2012 г. 11:37
    Модератор
  • Вообще-то компилятор (и линковщик) не должны были ругнуться вот в этот момент:

    >> забыл реализовать одну функцию (load, например). Скомпилировал, ошибка (не удивительно).

    Странно, у меня всегда линковщик ругался на нереализованные функции, если они используются. Если же не используются, то не ругается. 

    В указанных вами настройках стоит то что надо (Save All Changes). А могло сыграть роль параллельное построение (случайно увидел в тех же настройках)? Там стоит 2 (число параллельных построений). Повторить ситуацию не удалось никак. Расслабился, ибо других предположений, как случайно не перестроенный файл class.cpp, нет =)

    Спасибо за поддержку!

    30 апреля 2012 г. 16:56
  • Если что-то подобное повторится и вы поймете как воспроизвести такую ситуацию - пиши сюда или на Microsoft Connect

    Спасибо.


    Для связи [mail]