Форум программистов, компьютерный форум CyberForum.ru

LNK 2005, переменные уже определены в другом модуле - C++

Восстановить пароль Регистрация
 
TempuSFatumA
 Аватар для TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 87
08.10.2013, 01:20     LNK 2005, переменные уже определены в другом модуле #1
Здравия желаю! Проблема в том, что 2 эти статические переменные определяются еще раз.
Всего 2 .cpp и в каждый добавлен .h с этим классом. Если определять статические в 1 из .cpp ошибка уходит. Но хочется все же, чтобы они определялись в .h. #ifndef #define #endif не помогают. Есть ли какое-то решение проблемы?
C++
1
2
3
4
5
6
7
8
9
10
class flight
{
    static int mnt;
    static int num;
public:
    flight();
    ~flight();
};
int flight::num=0;
int flight::mnt=0;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
08.10.2013, 01:24     LNK 2005, переменные уже определены в другом модуле #2
Класс опиши в одном заголовочном файле, а 9-ю и 10-ю строки перенеси в один из .cpp файлов, там где вся реализация у тебя находится.
TempuSFatumA
 Аватар для TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 87
08.10.2013, 01:25  [ТС]     LNK 2005, переменные уже определены в другом модуле #3
Так о том и речьПо-другому никак?
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
08.10.2013, 01:26     LNK 2005, переменные уже определены в другом модуле #4
Покажи весь код.
TempuSFatumA
 Аватар для TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 87
08.10.2013, 01:32  [ТС]     LNK 2005, переменные уже определены в другом модуле #5
C++
1
2
3
//1.cpp
#include "3.h"
...
C++
1
2
3
//2.cpp
#include "3.h"
...
C++
1
2
3
4
5
6
7
8
9
10
11
//3.h
class flight
{
    static int mnt;
    static int num;
public:
    flight();
    ~flight();
};
int flight::num=0;
int flight::mnt=0;
Собственно это описано в начале было, но если так нагляднее.
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
08.10.2013, 01:35     LNK 2005, переменные уже определены в другом модуле #6
В заголовочном файле не должны быть определения переменных. Вынеси их в файл .cpp
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.10.2013, 01:39     LNK 2005, переменные уже определены в другом модуле #7
TempuSFatumA, два cpp - в один.
TempuSFatumA
 Аватар для TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 87
08.10.2013, 01:40  [ТС]     LNK 2005, переменные уже определены в другом модуле #8
Спасибо, жаль, что нельзя.

Добавлено через 1 минуту
2 цпп это тоже решение проблемы, но нужно именно с разделением цпп.
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
08.10.2013, 01:41     LNK 2005, переменные уже определены в другом модуле #9
Цитата Сообщение от TempuSFatumA Посмотреть сообщение
2 цпп это тоже решение проблемы, но нужно именно с разделением цпп.
Это глупость. Так не делают.
TempuSFatumA
 Аватар для TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 87
08.10.2013, 01:44  [ТС]     LNK 2005, переменные уже определены в другом модуле #10
А, то есть надо только .h плодить и инклюдить их в 1 .cpp?
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
08.10.2013, 01:47     LNK 2005, переменные уже определены в другом модуле #11
Не надо ничего плодить без необходимости. Обычно один класс - один файл (.h, если не шаблонный то и .cpp). Все приходит с опытом..
TempuSFatumA
 Аватар для TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 87
08.10.2013, 01:50  [ТС]     LNK 2005, переменные уже определены в другом модуле #12
А, вот, собственно 1 из .cpp изменил на .h и всё заработало. Пасибо, каст, про "глупость"
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2013, 02:00     LNK 2005, переменные уже определены в другом модуле
Еще ссылки по теме:

C++ cin, cout, endl не определены
Ошибка: не определены переменные класса C++
Как одному классу узнать о другом в другом файле, если они не имеют общего наследования C++

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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
08.10.2013, 02:00     LNK 2005, переменные уже определены в другом модуле #13
На самом деле это не выход. Ты не понял сути. Прототипы и определения надо объявлять в заголовочных файлах, для этого они и созданы. .cpp файлы созданы для того чтобы описывать в них реализацию. Это ключевая парадигма модульного программирования.
Yandex
Объявления
08.10.2013, 02:00     LNK 2005, переменные уже определены в другом модуле
Ответ Создать тему
Опции темы

Текущее время: 05:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru