5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
1

gcc компилирует старую версию файла (до редактирования) вместо новой (редактированной) версии

26.06.2013, 18:54. Показов 1591. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет!
Проблема описана в заголовке, объясню более подробно - проблема проявилась (и стабильно повторяется) в таком виде (пример упрощен до минимума):
допустим имеем 2 файла
C++
1
2
3
4
5
6
7
8
9
10
//header.h
template <class T>
class Foo
{
public:
    void bar()
    {
        std::cout << "Hello" << std::endl;
    }
};
C++
1
2
3
4
5
6
//main.cpp
int main()
{ 
    Foo<some_type> baz;
    baz.bar();
}
компилируем при помощи g++, все ОК. Потом делаем такие изменения

C++
1
2
3
4
5
6
7
8
// в header.h меняем сигнатуру метода
    void bar(int)
    {
        std::cout << "Hello" << std::endl;
    }
 
// в main.cpp соответсвенно вызов метода
baz.bar(1);
на что g++ пишет, что такой перегрузки функции не существует. После этого в header.h можно писать вообще все что угодно, хоть так
C++
1
2
3
alsdjf sadgjs fhj isdhfj slhfas
ashdf iasfhweiauhisjfioasjdf
asdfasdio hfasoid
и, если при этом сделать вызов baz.bar() без аргументов, то все удачно компилируется.
Вот, не могу решить эту проблему. Уже даже начал думать, что QtCreator (работаю в нем) после нажатия ctrl+S "сохраняет" файл у себя в буфере, и потом, когда ему будет удобно, скидывает на диск. Да, бред, но когда видишь такую мистику, начинаешь строить самые нелепые догадки. Короче проверил это (правил хедер через Vim, после чего смотрел вывод cat'а и, убедившись, что файл на диске реально изменен, пробовал компилировать), g++ все равно где-то находит старую версию файла, новую в упор не видит. В связи с этим пока что перешел на clang, но хочется разобраться с gcc.
Может будут какие-нибудь идеи?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.06.2013, 18:54
Ответы с готовыми решениями:

При обновлении версии php до 7.0 phpinfo() показывает старую версию
Доброго времени суток! Ubuntu. Обновился по инструкции. php -v - все, как надо. phpinfo() -...

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

Пересохранить файлы с новой версии компаса в 17 версию.
Нужно пересохранить файлы с новой версии компаса в 17 версию.

Lexmark ms812dn, Как откатить на старую версию прошивки или где достать старую?
Как откатить на старую версию прошивки или где достать старую? Прошили последней прошивкой,...

4
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
26.06.2013, 20:03 2
Подозреваю, что используется старый объектный файл. Проблемы, скорее всего, где-нибудь в сборочных файлах проекта, хидер просто не указан в них, например.
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
26.06.2013, 20:11  [ТС] 3
Цитата Сообщение от NoMasters Посмотреть сообщение
Подозреваю, что используется старый объектный файл.
Тоже такое подозрение было, удалял все объектники перед сборкой.
Цитата Сообщение от NoMasters Посмотреть сообщение
где-нибудь в сборочных файлах проекта
не, я руками собирать пробовал. Проект не большой - КР для ВУЗа, всего 2 файла.

P.S. забыл сказать, проблема возникла но новом ноуте, раньше никогда такого не видел. Хотя думаю это не имеет значения, но все же.
0
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
26.06.2013, 20:32 4
Минимальный компилябельный пример, команды сборки? Что показывает g++ -E main.cpp?
1
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
30.06.2013, 17:46  [ТС] 5
Блин, пока нет времени сесть за ноут и выложить какой-нибудь проблемовоспроизводимый пример.
Цитата Сообщение от NoMasters Посмотреть сообщение
Что показывает g++ -E main.cpp?
Почему-то сам не подумал об этом, обязательно гляну.
Цитата Сообщение от NoMasters Посмотреть сообщение
команды сборки?
Никаких ключей, тупо g++ main.cpp
0
30.06.2013, 17:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2013, 17:46
Помогаю со студенческими работами здесь

Объект браузера продолжает хранить старую версию загруженного файла
Проблема в том, что в пределах одной функции(button1_Click()), после изменения файла, объект...

GCC Сборка 32 разрядной версии GCC 64 разрядным GCC
Доброго времени суток. Возникла необходимость под 32х разрядный Linux, собрать 32 разрядный GCC. Но...

Как установить последнюю версию Firefox, не обновляя старую версию?
Для удаленной работы применяется цифровая подпись, но она работает только в Firefox не выше 51-й...

g++/gcc не компилирует
есть С++ код #include &lt;iostream&gt; int main(){ std::cout &lt;&lt; &quot;hello ,world!&quot;; } ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru