Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 104
Завершенные тесты: 1
#1

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

08.10.2013, 01:20. Просмотров 469. Ответов 12
Метки нет (Все метки)

Здравия желаю! Проблема в том, что 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;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2013, 01:20
Ответы с готовыми решениями:

Ошибки LNK 2005, LNK 1169
Не могу найти ошибку в проге: functions.h ----------- #include <iostream>...

Ошибка: не определены переменные класса
Здравствуйте. Есть класс, он содержит 3 private переменных и функцию,...

Подскажите как правильно подключать библиотеки и решения. (функции уже определены в *.obj)
Вот тут взял самомопальный aes. Там есть 3 исходных кода. 3 -...

Почему нельзя использовать в операторе case переменные, которые определены как #define
Я не понимаю, почему Visual Studio ругается на строку с case в коде. Вроде все...

глобальные переменные в модуле
Нужно сохранить пару массивов и несколько переменных, но так чтобы их в...

12
castaway
Эксперт С++
4929 / 3036 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
08.10.2013, 01:24 #2
Класс опиши в одном заголовочном файле, а 9-ю и 10-ю строки перенеси в один из .cpp файлов, там где вся реализация у тебя находится.
0
TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 104
Завершенные тесты: 1
08.10.2013, 01:25  [ТС] #3
Так о том и речьПо-другому никак?
0
castaway
Эксперт С++
4929 / 3036 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
08.10.2013, 01:26 #4
Покажи весь код.
0
TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 104
Завершенные тесты: 1
08.10.2013, 01:32  [ТС] #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;
Собственно это описано в начале было, но если так нагляднее.
0
castaway
Эксперт С++
4929 / 3036 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
08.10.2013, 01:35 #6
В заголовочном файле не должны быть определения переменных. Вынеси их в файл .cpp
1
alsav22
5441 / 4836 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.10.2013, 01:39 #7
TempuSFatumA, два cpp - в один.
0
TempuSFatumA
1 / 1 / 0
Регистрация: 02.04.2013
Сообщений: 104
Завершенные тесты: 1
08.10.2013, 01:40  [ТС] #8
Спасибо, жаль, что нельзя.

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

Работа с tinyxml ошибки LNK 2019 и LNK 2001
всем привет! скачал архив tinyxml, разархивировал в папку проекта затем...

LNK 2019 ссылка на неразрешенный внешний символ в функции _main; LNK 1120 неразрешенных внешних элементов: 1
#include "stdafx.h" #include <iostream> #include <fstream> #include...

Как определить размер массива объявленного в другом модуле?
Возникла необходимость разбить программу на модули, и появилась проблема: ...


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

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

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