Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 4

Разделение класса со статической переменной в многофайловом проекте

29.07.2016, 10:17. Показов 1566. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На ровном месте происходят какие-то непонятные чудеса, как будто бы я шаблонный класс объявляю - если реализация класса находится в заголовочном файле, то всё хорошо, но если я её перенесу в .срр, то у компилятора возникает внезапная слепота и он выдаёт ошибку "неопределённая ссылка на конструктор/метод/и т.п.". В чём жопа-то? Раньше такого не происходило. Это у меня проблемы с IDE/компилятором или всё-таки в программе?

Собирал в CodeBlocks.

class.h
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
#include <iostream>
 
using namespace std;
 
class justclass {
 
    static size_t count;
 
    double douf;
       int intf;
 
public:
 
    justclass();
    justclass(double a,int b);
    justclass(const justclass& ob);
    ~justclass();
 
    size_t which();
 
    friend
    istream& operator>>(istream&,justclass&);
 
    friend
    ostream& operator<<(ostream&,justclass);
};
class.cpp
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
31
32
33
34
35
36
37
38
39
40
41
42
#include "class.h"
 
    size_t justclass::count;
 
    justclass::justclass(): douf(0), intf(0)
    {
        ++count;
    }
 
    justclass::justclass(double a,int b): douf(a), intf(b)
    {
        ++count;
    }
 
    justclass::justclass(const justclass& ob)
    {
        douf=ob.douf;
        intf=ob.intf;
 
        ++count;
    }
 
    justclass::~justclass()
    {
        --count;
    }
 
    size_t justclass::which()
    {
        return count;
    }
 
 
    istream& operator>>(istream& inp,justclass& ref)
    {
        inp>>ref.douf>>ref.intf; return inp;
    }
 
    ostream& operator<<(ostream& out,justclass cop)
    {
        out<<cop.douf<<' '<<cop.intf<<endl; return out;
    }
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include "class.h"
 
using namespace std;
 
int main()
{
    justclass a,b;
    cin>>a>>b;
 
    cout<<a<<b<<a.which();
    return 0;
}
Выдаёт ошибку "undefined reference to `justclass::justclass()'", например. Т.е. как будто реализации конструктора нет. Но если я помещу всё в .h, то всё работает. Втф?

п.с. Заранее спасибо за помощь.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.07.2016, 10:17
Ответы с готовыми решениями:

Определение метода вне класса, как inline в многофайловом проекте
Здравствуйте! Помогите разобраться!) В общем имеется: ...

Перегрузка << в многофайловом проекте
Чтобы узнать, как перегружать потоки, зашел на msdn, нашел там это: #include &lt;iostream&gt; using namespace std; class...

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

10
Заблокирован
29.07.2016, 10:30
Не знаю, как работает твоя IDE, но по-нормальному, сначала нужно скомпилировать class.cpp в объектный файл, а потомпри компиляции main.cpp его использовать. Если твой среда пытается скомпилировать main.cpp в лоб, логично, что она просто не подозревает о существовании class.cpp и не может найти реализацию методов из class.h.
0
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
29.07.2016, 10:46
В class.cpp почему переменная justclass::count не инициализирована?

Добавлено через 2 минуты
Еще есть подозрение на конфликт имен с глобальным std::count из за using namespace std; в заголовке.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
29.07.2016, 10:52
Цитата Сообщение от notAll Посмотреть сообщение
В class.cpp почему переменная justclass::count не инициализирована?
С чего бы она не инициализирована?
Она будет инициализирована нулем.
Цитата Сообщение от GPU Посмотреть сообщение
Собирал в CodeBlocks.
Надеюсь, class.cpp добавили в проект?
Проект прикрепите в архиве, посмотрю,
возможно, Вы нагородили в настройках или с проектом что-то не то.

за using namespace std; в заголовке,
надо сразу руки отрубать
1
 Аватар для Хрисипп
19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 230
29.07.2016, 11:57
может class.cpp - не cpp, a class.c.
0
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 4
29.07.2016, 14:04  [ТС]
Croessmah, да, за это надо руки по самые ягодицы, я знаю)
notAll, надо будет проверить наличие конфлмкта, да
0
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 4
29.07.2016, 18:11  [ТС]
Croessmah, вот папка проекта.
Вложения
Тип файла: rar temp.rar (8.0 Кб, 4 просмотров)
0
-19 / 1 / 0
Регистрация: 28.07.2016
Сообщений: 41
29.07.2016, 18:34
лучше class.cpp это по стандарту
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
29.07.2016, 18:58
Лучший ответ Сообщение было отмечено GPU как решение

Решение

GPU, правой кнопкой на class.cpp, в меню выбери Properties. Появится вот такое окно:

Там выстави галочки для Debug и Release.
Внимательнее будь, когда файл в проект добавляешь
1
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 4
29.07.2016, 19:08  [ТС]
DrOffset, да,я догадывался, что ошибка где-то в очень стыдном месте.

Спасибо.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
29.07.2016, 19:13
GPU, и это, кстати, очень просто можно продиагностировать, если посмотреть в окошко build log. Там показывается процесс компиляции. Вызовов компилятора должно быть столько, сколько у тебя компилируемых единиц в проекте, то есть два. А у тебя был всего один, потому что второй файл не относился ни к одной и целей сборки (ни к Debug, ни к Release).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.07.2016, 19:13
Помогаю со студенческими работами здесь

Struct в многофайловом проекте
Если в main файле создать структуру, то как её использовать в функциях, которые в других cpp файлах? Структуру требуется объявить в...

Классы: как из статического метода обратиться к статической переменной класса
Классы: как из статического метода обратиться к статической переменной класса

Ошибка LNK2019 в многофайловом проекте
Смысл: Мне нужно создать абстрактный класс контейнер, на его основе конкретные классы, далее создать абстрактный класс итератор и для...

Иерархия классов в многофайловом проекте
Всем привет. Есть проблема с созданием программы. Должна быть небольшая иерархия классов, и все классы должны быть описаны в паре .h и .cpp...

Ошибка LNK2005 в многофайловом проекте
Появилась такая проблема ,выдает ошибку LNK2005 при компиляции программы,вроде сделано все правильно прототипы в .h,а реализация в .cpp ,...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru