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

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

22.09.2015, 01:17. Просмотров 949. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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 ...

12
Модератор
8139 / 6014 / 800
Регистрация: 14.02.2011
Сообщений: 20,802
22.09.2015, 01:30 2
Цитата Сообщение от maxm Посмотреть сообщение
класс в хедере и функция из мейн отделена в хедер.
это зачем еще?
код должен быть в Си файлах, именно они являются единицей трансляции
Цитата Сообщение от maxm Посмотреть сообщение
. КАК И ПОЧЕМУ? ПОжалуйста, обьясните.
неплохо бы увидеть что пишет компилятор
не появляется ли там окошко "запустить последнюю версию"?
0
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
22.09.2015, 01:37  [ТС] 3
Ничего он не пишет, просто компилит, ошибок нету при компиляции
0
Модератор
8139 / 6014 / 800
Регистрация: 14.02.2011
Сообщений: 20,802
22.09.2015, 01:40 4
Цитата Сообщение от maxm Посмотреть сообщение
Ничего он не пишет,
Ой ли
по крайней мере он должен написать про то что начал компиляцию про результаты
включена ли функция "предкомпилированые заголовки"
попробуй очистить проект и пересобрать полностью
0
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
22.09.2015, 09:32  [ТС] 5
Да то же, что и всегда.
Buid started..
Generating code...
0
:)
Эксперт С++
4762 / 3256 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
22.09.2015, 13:03 6
maxm, скинь проект в архиве на форум, так будет проще тебе помочь, имхо.
0
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
22.09.2015, 13:50  [ТС] 7
Сейчас прикреплю.
Разобрался чуток в проблеме.
Если нажать "clean solutiom", "build solution", то все норм.
Препод в универе сам в шоке, не понимает почему файл который входит в компиляцию, то есть хедер с классом, все равно не меняет выход.
0
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
22.09.2015, 13:52  [ТС] 8
Сам проект.
ПОпробуйте кому лень поменять то либо в функции get(), например вывести что то еще.
0
Вложения
Тип файла: zip lab1_2.zip (2.44 Мб, 3 просмотров)
181 / 179 / 66
Регистрация: 15.02.2015
Сообщений: 515
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
181 / 179 / 66
Регистрация: 15.02.2015
Сообщений: 515
22.09.2015, 15:50 10
Лучший ответ Сообщение было отмечено DrOffset как решение

Решение

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

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

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

Добавлено через 50 минут
Просто два одинаковых проекта, но один не работает корректно, а второй работает. Как такое может быть?
0
Модератор
8139 / 6014 / 800
Регистрация: 14.02.2011
Сообщений: 20,802
23.09.2015, 06:20 12
еще раз
включена ли в проекте функция "предкомпилированые заголовки"?
если включена то то компилятор, для убыстрения компиляции, не смотрит на изменения в заголовочных файлах,по крайней мере в stdafx.h
0
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
23.09.2015, 23:21  [ТС] 13
Выключено там все.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.09.2015, 23:21

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

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

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

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

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


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

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

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