Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
maxm
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
1

Баг VS или как? Функция в многофайловом приложении

22.09.2015, 01:17. Просмотров 901. Ответов 12
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
#include "function.h"
int main(){
    LoadFileToStack();
    cout << endl;
    st
    return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void LoadFileToStack()
{
    FILE *file;
    file = fopen("file.txt", "r");
    char p[80];
    quee* first = new quee;
    quee* q = 0;
    quee* temp = 0;
    if (fgets(p, 80, file)) first->push(p);
    temp = first;
    while (fgets(p, 80, file)) {
        q = new quee();
        q->push(p);
        temp->next = q;
        temp = q;
    }
    q = first;
    while (q) {
        q->get();
        q = q->next;
    }
    fclose(file);
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class quee{
public:
    
    char *p;
    quee *next;
    
    ~quee()
    {
        if (*p) delete[] p;
    }
 
    quee()
    {
        p = 0;
    }
 
    void push(char *s)
    {
        int a = strlen(s);
        p = new char[a];
        strcpy(p, s);
    }
 
    void get()
    {
        using namespace std;
        cout << p ;
    }
 
};
Суть проблемы: тут три файла: мейн, класс в хедере и функция из мейн отделена в хедер. Когда я меняю что либо в функциях класса( например вместо вывода в функции get() вывожу "всем кранты" или вообще затираю вывод, программе все ровно и она делает то же, что и до этого. Она НЕ ВИДИТ изменений, хотя файлы перед компиляцией сохраняю, даже перезапускал среду - тот же результат.
ВАЖНО: когда функцию LoadFileToStack я пихаю в мейн, а не отделяю в хедер, то есть осталось 2 файла, все РАБОТАЕТ! Она видит все изменения, делает в общем что прикажу. НО:
как только я пихну функцию обратно в хедер третий, и include ее в мейн, то опять та же фигня, но результат всегда тот, что выдавался последним при запуске проги с функцией внутри мейна. То есть как только ее отделить в хедер, компилятор просто фигачит ту же прогу, невзирая на то, что я вообще удаляю функции класса. КАК И ПОЧЕМУ? ПОжалуйста, обьясните.

Добавлено через 10 минут
Класс включаю и туда и туда через ifndef, чтоб без повтора
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2015, 01:17
Ответы с готовыми решениями:

Ошибка 2019 с линковщиком в многофайловом приложении
не могу понять в чем тут проблема. выдает ошибки: 1&gt;main.obj : error LNK2019: ссылка на...

Ошибка lnk2019 для шаблонов в многофайловом приложении
Написал минимальный код, генерирующий такую ошибку. Сборщик ругается, что конструктор Obj1 не...

Программа из учебника Прата. Структуры в многофайловом приложении. Исправить недочеты в коде
Посмотрите, пожалуйста, что где исправить. int fill()-для заполнения массива all-для вывода суммы...

Использование string в многофайловом приложении. Необходимость подключения библиотек и пространства имён
Здравствуйте. Есть заголовочный и cpp файлы. В заголовочном пишу#ifndef MODEL_H #define MODEL_H ...

std::regex : баг на сайте или баг компилятора?
http://en.cppreference.com/w/cpp/regex/regex_match этот код выкидывает throw... Добавлено через...

12
ValeryS
Модератор
7720 / 5732 / 742
Регистрация: 14.02.2011
Сообщений: 19,620
Завершенные тесты: 1
22.09.2015, 01:30 2
Цитата Сообщение от maxm Посмотреть сообщение
класс в хедере и функция из мейн отделена в хедер.
это зачем еще?
код должен быть в Си файлах, именно они являются единицей трансляции
Цитата Сообщение от maxm Посмотреть сообщение
. КАК И ПОЧЕМУ? ПОжалуйста, обьясните.
неплохо бы увидеть что пишет компилятор
не появляется ли там окошко "запустить последнюю версию"?
0
maxm
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
22.09.2015, 01:37  [ТС] 3
Ничего он не пишет, просто компилит, ошибок нету при компиляции
0
ValeryS
Модератор
7720 / 5732 / 742
Регистрация: 14.02.2011
Сообщений: 19,620
Завершенные тесты: 1
22.09.2015, 01:40 4
Цитата Сообщение от maxm Посмотреть сообщение
Ничего он не пишет,
Ой ли
по крайней мере он должен написать про то что начал компиляцию про результаты
включена ли функция "предкомпилированые заголовки"
попробуй очистить проект и пересобрать полностью
0
22.09.2015, 01:40
maxm
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
22.09.2015, 09:32  [ТС] 5
Да то же, что и всегда.
Buid started..
Generating code...
0
Tulosba
:)
Эксперт С++
4751 / 3245 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
22.09.2015, 13:03 6
maxm, скинь проект в архиве на форум, так будет проще тебе помочь, имхо.
0
maxm
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
22.09.2015, 13:50  [ТС] 7
Сейчас прикреплю.
Разобрался чуток в проблеме.
Если нажать "clean solutiom", "build solution", то все норм.
Препод в универе сам в шоке, не понимает почему файл который входит в компиляцию, то есть хедер с классом, все равно не меняет выход.
0
maxm
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
22.09.2015, 13:52  [ТС] 8
Сам проект.
ПОпробуйте кому лень поменять то либо в функции get(), например вывести что то еще.
0
Вложения
Тип файла: zip lab1_2.zip (2.44 Мб, 3 просмотров)
Operok
178 / 176 / 66
Регистрация: 15.02.2015
Сообщений: 511
Завершенные тесты: 2
22.09.2015, 15:47 9
Лучший ответ Сообщение было отмечено DrOffset как решение

Решение

В quee.h добавь #pragma once

Добавлено через 35 минут
...нет это было одноразовое решение.
Пересобрал ваш проект, работает как надо (не считая пары исправлений в коде, которые почему-то не проявляли себя в вашем "решении")

Добавлено через 2 минуты
C++
1
2
3
4
5
quee()
    {
        next = 0;      //не понятно как до пересборки программа выходила из цикла
        p = 0;
    }
C++
1
2
3
4
5
6
void push(char *s)
    {
        int a = strlen(s) + 1;    //а как же нулевой символ?
        p = new char[a];
        strcpy(p, s);
    }
Добавлено через 2 минуты
C++
1
2
3
4
5
 char p[80 + 1];     //опять забыли про нулевой символ
    quee* first = new quee;
    quee* q = 0;
    quee* temp = 0;
    if (fgets(p, 80, file)) first->push(p);       //или здесь указать 79. В вашем файле нет строк 80+ символов, но вдруг?
0
Operok
178 / 176 / 66
Регистрация: 15.02.2015
Сообщений: 511
Завершенные тесты: 2
22.09.2015, 15:50 10
Лучший ответ Сообщение было отмечено DrOffset как решение

Решение

вот пересобранный проект
0
Вложения
Тип файла: rar ConsoleApplication1.rar (1.75 Мб, 2 просмотров)
maxm
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
22.09.2015, 21:05  [ТС] 11
Теперь оно учитывает изменения .
Что было не так?

Добавлено через 12 минут
Сделал то же, что и вашем решении, подобавлял память на последний элемент, указатели, все как надо.
Мой по прежнему не видит, когда меняю вывод. Только после "clean solution".
Ваш работает. В чем проблема:?

Добавлено через 1 час 57 минут
Помогите а то мозг взорвется. Оно не подтягивает изменений в файле в котором класс описан, пока я функцию не перекину в отдельный файл из мейна или наоборот. Ну или "clean solutiom", "build solution".
Я конечно не против так нажимать каждый раз, но то что мне скинули сюда переделанное работает, и я то же написал себе, а мое все равно не работает без этих манипуляций.

Добавлено через 50 минут
Просто два одинаковых проекта, но один не работает корректно, а второй работает. Как такое может быть?
0
ValeryS
Модератор
7720 / 5732 / 742
Регистрация: 14.02.2011
Сообщений: 19,620
Завершенные тесты: 1
23.09.2015, 06:20 12
еще раз
включена ли в проекте функция "предкомпилированые заголовки"?
если включена то то компилятор, для убыстрения компиляции, не смотрит на изменения в заголовочных файлах,по крайней мере в stdafx.h
0
maxm
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
23.09.2015, 23:21  [ТС] 13
Выключено там все.
0
23.09.2015, 23:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2015, 23:21

Баг asio? или баг TCP стека?
всем привет. повстречался с очень странным багом. и не могу определить кто бажит, asio, или...

Баг в приложении
Здравствуйте , нужна помощь в отладке приложения. Вот такая история у меня , обратился к...

Забавный баг Делфи ...или не баг?
кароч кидаем на форму 2 editа и кнопку и пишем такой код unit Unit1; interface uses ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru