Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для maxm
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457

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

22.09.2015, 01:17. Показов 1471. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.09.2015, 01:17
Ответы с готовыми решениями:

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

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

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

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

Решение

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

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

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

Добавлено через 50 минут
Просто два одинаковых проекта, но один не работает корректно, а второй работает. Как такое может быть?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
23.09.2015, 06:20
еще раз
включена ли в проекте функция "предкомпилированые заголовки"?
если включена то то компилятор, для убыстрения компиляции, не смотрит на изменения в заголовочных файлах,по крайней мере в stdafx.h
0
 Аватар для maxm
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
23.09.2015, 23:21  [ТС]
Выключено там все.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.09.2015, 23:21
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru