|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.04.2016, 09:20 | #1 |
Пользователь
Регистрация: 05.05.2011
Сообщений: 35
|
Проблема со static членом и методом
Здравствуйте.
Такой вопрос, поиск и гуглёж не помог: Компилятор i486-pc-nto-qnx6.5.0-c++-4.4.2, собираю для QNX из-под Винды. Есть статический метод класса Insertion. Экземпляр класса планируется один в проекте. Код:
Но компилятор ругается: In function `MprsClass::MprsClass()': MprsClass.cpp.text+0x4e): undefined reference to `MprsClass::node' In function `MprsClass::Insertion(usbd_connecti on*, usbd_device_instance*)': MprsClass.cpp.text+0x236): undefined reference to `MprsClass::node' В сишнике пытался обратиться и как Код:
Код:
В результате порешал костылём, вынес node как глобальную переменную в .срр файл. Но я не понимаю, отчего такая фигня творится. |
07.04.2016, 09:28 | #2 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,760
|
Потому что объявить их вы объявили, а память не выделили. В любой книжке про статик сказано, что после объявления необходимо в единице трансляции (в ццп у вас написать), типа,
Цитата:
|
|
07.04.2016, 09:38 | #3 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
А зачем struct писать при объявлении если С++, а не С?
Цитата:
static private вещи часто выносят в анонимный неймспейс в .cpp Код:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
07.04.2016, 09:51 | #4 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,760
|
Цитата:
|
|
07.04.2016, 10:00 | #5 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Так я о том, что использовать переменные/функции в .cpp (желательно в анонимном неймспейсе) вместо static private в классе это вполне нормальная практика.
Наверно в большинстве случаев так даже лучше потому что например 1. Можно менять (тип, имя) или удалять этот код без перекомпиляции всего, что заинклюдило это хедер. 2. При изменении или удалении кода надо делать это только в 1 месте вместо 2. 3. Пользователь хедер файла не утомляется чтением не нужных ему вещей
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
08.04.2016, 09:14 | #6 |
Пользователь
Регистрация: 05.05.2011
Сообщений: 35
|
Alex11223, благодарю за пояснение.
p51x, заработало. Спасибо большое всем, кто откликнулся :} |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Найти сумму ряда, оканчивающегося N-ым членом. N вводится с клавиатуры. | Julia_Sv | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 01.02.2016 22:07 |
Как определить каким членом рабочей группы является пользователь | AppData | Общие вопросы Delphi | 1 | 23.08.2014 08:57 |
Написать программу решения уравнения методом дихотомии, комбинированным методом секущих хорд, методом простых итераций (на C++) | Bloody_Mary | Помощь студентам | 0 | 14.05.2014 21:05 |
static и non-static context | kos1nus | Общие вопросы по Java, Java SE, Kotlin | 1 | 17.07.2013 00:10 |
Вычислить N-й член арифметической прогрессии с шагом K и первым членом A. | atenon | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 0 | 24.10.2012 17:47 |