|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
||||||
Вызов метода класса в другом файле, не обращаясь к самому классу16.09.2022, 16:12. Показов 1348. Ответов 13
Метки нет (Все метки)
Всех приветствую. Есть такой код:
0
|
||||||
| 16.09.2022, 16:12 | |
|
Ответы с готовыми решениями:
13
Вызов метода класса, расположенного в другом файле Groovy - Вызов в файле метода описанного в другом файле Вызов метода класса в лямбде-функции, вызываемой в другом методе этого же класса |
|
101 / 95 / 10
Регистрация: 31.08.2022
Сообщений: 1,014
|
|
| 16.09.2022, 17:40 | |
|
думаю, что так
CPlainInsteadView mainclass; а дальше , через mainclass у вас есть описание класса, но нет его экземпляра в памяти
0
|
|
|
Модератор
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
|
||||||
| 16.09.2022, 17:57 | ||||||
|
метод статический. Поэтому можно его вызывать прямо от имени класса без создания экземпляра:
0
|
||||||
|
Вездепух
12943 / 6810 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
|
||||
| 16.09.2022, 18:33 | ||||
|
0
|
||||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|
| 16.09.2022, 18:43 [ТС] | |
|
Я его не где не вызывал,кроме того файла,где я его реализовывал,поэтому,как я понимаю,в заголовочном файле его можно было не описывать,но мне понадобилось обратиться к нему из другого файла. Я понял,что перед методом мне придётся указать имя класса. Просто я думал,что раз в реализации метода не указано CPlainInsteadView::,то его можно как-то ваызвать как обычную функцию.
0
|
|
|
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,816
|
||||||||||||||||
| 16.09.2022, 18:43 | ||||||||||||||||
0
|
||||||||||||||||
|
Вездепух
12943 / 6810 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
|
|||||
| 16.09.2022, 19:03 | |||||
|
Пока что мы видим обычную функцию, никакого отношения к вашему классе не имеющую. При чем здесь вообще ваш класс? static из определения функции.Еще раз: раз в реализации метода не указано CPlainInsteadView::, то это вообще НЕ метод, а обычная самостоятельная функция, никакого отношения к вашему классе не имеющая. --- Определитесь сначала, что именно вы хотите сделать. Обычную функцию или статический метод? У вас пока семь пятниц на неделе.
1
|
|||||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|
| 16.09.2022, 19:26 [ТС] | |
|
Хорошо,но вопрос,как эту функцию вписать в заголовочный файл,чтобы использовать в других файлах?
0
|
|
|
Вездепух
12943 / 6810 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
|
|||||||
| 16.09.2022, 19:29 | |||||||
|
Если не делать ее статическим методом класса, то вам нужно 1. Убрать ключевое слово static из реализации этой функции в .cpp файле.2. Добавить в заголовочный файл
0
|
|||||||
|
101 / 95 / 10
Регистрация: 31.08.2022
Сообщений: 1,014
|
|||||||||||||||||
| 16.09.2022, 20:11 | |||||||||||||||||
0
|
|||||||||||||||||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
||
| 16.09.2022, 21:57 [ТС] | ||
0
|
||
|
Вездепух
12943 / 6810 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
|
|||||||||||||
| 16.09.2022, 22:06 | |||||||||||||
|
Обычные функции, объявленные со словом static, имеют внутреннее связывание. Функции с внутренним связыванием невозможно вызвать напрямую, т.е. к ним невозможно прилинковаться по имени. Тем не менее вы можете вызывать такие функции из других файлов через указатель (если сумеете получить такой указатель).Например
ptr() и попадать в foo, несмотря на то, что foo обладает внутренним связыванием. Но напрямую вызвать foo из других файлов мы не можем.static имеет совершенно разные, совершенно никак друг с другом не связанные смыслы, когда оно используется с обычными функциями или с методами классов. Не нужно валить это все в одну кучу.Да, статические методы классов можно использовать где угодно.
0
|
|||||||||||||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|
| 16.09.2022, 23:10 [ТС] | |
|
Хорошо,а почему если мы объявим функцию так:
[C++] //test.h class test {... } static void fu(); [/C++] А потом реализуем её в файле test.cpp,в который мы подключим наш h файл,после чего захотим использовать в файле test1.cpp,в который тоже включим test.h,компилятор в visual studio выдаст ошибку,что,мол,статическая функция объявлена,ноне определена,но не то,что её,к примеру,нельзя использовать в других файлах.
0
|
|
|
Вездепух
12943 / 6810 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
|
||||||||
| 16.09.2022, 23:31 | ||||||||
Функция с внутренним связыванием является локальной в каждом файле. В каждом файле она своя и ничего не знает о функциях с таким же именем других файлах. Таким образом в вашем test1.cpp вы объявляете свою независимую, локальную, внутреннюю fu, для которой вы не предоставляете определения. Об этом вам и говорит компилятор.То есть тут нет ошибки "нельзя использовать в других файлах" просто потому что тут нет и попытки "использовать в других файлах". Такой попытки и быть не может. Поэтому и ошибки такой быть не может. Это вы у себя в голове придумали, что такой код - это якобы попытка "использовать fu в других файлах". А на самом деле нет. Компилятор это видит совсем по-другому. Компилятор видит локальную функцию без определения. И жалуется на это.
0
|
||||||||
| 16.09.2022, 23:31 | |
|
Помогаю со студенческими работами здесь
14
Вызов метода одного класса в другом классе Вызов статического метода класса в другом классе
Полиморфизм: вызов метода базового класса, переопределенного метода и нового метода Проверка столкновений обращаясь к классу объекта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 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-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|