Перейти к содержимому

Как вызвать функцию из другого класса в c

  • автор:

Как вызвать функцию из другого класса в c

как мне из одного класса вызвать функцию с параметрами, объявленную в другом классе?

class CKlassA : public VS_FIXEDFILEINFO < protected: struct LANGANDCODEPAGE < WORD wLanguage; // language WORD wCodePage; // code page >; public: . . bool FunctionA(OUT LPTSTR lpszParam, IN DWORD dwSize) < return GetValue(_T("ABC"), lpszParam, dwSize); > protected: BYTE* m_pInfo; LANGANDCODEPAGE m_Translate; >;

как мне из класса CKlassB вызвать FunctionA с параметрами

Исправлена подсветка синтаксиса. — ПК.
Re: Вызов функций из другого класса

От: Vamp
Дата: 10.09.03 07:52
Оценка:

А>как мне из класса CKlassB вызвать FunctionA с параметрами
Включить объявление этого класса и создаеть его объект.

Да здравствует мыло душистое и веревка пушистая.
Re[2]: Вызов функций из другого класса

От: Аноним
Дата: 10.09.03 07:54
Оценка:

Здравствуйте, Vamp, Вы писали:

А>>как мне из класса CKlassB вызвать FunctionA с параметрами
V>Включить объявление этого класса и создаеть его объект.

а как это сделать?
(напишите пример для моего случая плиз)

Re[3]: Вызов функций из другого класса

От: LaptevVV
Дата: 10.09.03 08:04
Оценка:

Здравствуйте, Аноним, Вы писали:

А>>>как мне из класса CKlassB вызвать FunctionA с параметрами
V>>Включить объявление этого класса и создаеть его объект.

А>а как это сделать?
А>(напишите пример для моего случая плиз)
В классе В
CKlass A;
A.FunctionA(параметры);

Хочешь быть счастливым — будь им!
Без булдырабыз.
Re[3]: Вызов функций из другого класса

От: GarryIV
Дата: 10.09.03 08:05
Оценка: +1 -1

Здравствуйте, Аноним! Вы писали:

А>>> как мне из класса CKlassB вызвать FunctionA с параметрами
V>> Включить объявление этого класса и создаеть его объект.

> а как это сделать?
> (напишите пример для моего случая плиз)

ИМХО Вам стоит сначала прочитать про ООП для начала, по крайней мере то что касается инкапсуляции. А то желание из одного класса звать функцию-член другого класса вызывает недоумение.

Posted via RSDN NNTP Server 1.7 beta
WBR, Igor Evgrafov
Re[4]: Вызов функций из другого класса

От: Аноним
Дата: 10.09.03 08:09
Оценка:

Здравствуйте, GarryIV, Вы писали:

GIV>Здравствуйте, Аноним! Вы писали:

А>>>> как мне из класса CKlassB вызвать FunctionA с параметрами
V>>> Включить объявление этого класса и создаеть его объект.

>> а как это сделать?
>> (напишите пример для моего случая плиз)

GIV>ИМХО Вам стоит сначала прочитать про ООП для начала, по крайней мере то что касается инкапсуляции. А то желание из одного класса звать функцию-член другого класса вызывает недоумение.

возможно .
но я и сам давно разобрался!

Как вызвать функцию из другого класса в c

Пользователь

Регистрация: 28.03.2011

Сообщений: 32

Как вызвать функцию из класса ?

Есть класс, а в нем функция

class test < public: int sh(); >; sh()

А как теперь его вызвать ?

test::sh();

не прокатывает, вылазит ошибка

Use . or -> to call ‘test::sh()

, однако при попытке test.sh(); или test->sh(); тоже не компилируется

Silly Student
Посмотреть профиль
Найти ещё сообщения от Silly Student

Форумчанин

Регистрация: 07.08.2011

Сообщений: 576

вот так попробуй

int test::ch() < //тут тело метода >

Пользователь

Регистрация: 25.05.2011

Сообщений: 89

class test < public: int sh(); >; int test::sh() < ShowMessage("sh"); return 0; >void main()

Последний раз редактировалось _Alerter_; 13.10.2011 в 20:09 .

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вызвать функцию из функции ? PheonixS JavaScript, Ajax 3 16.12.2010 05:35
Как вызвать функцию из юнита? Des Общие вопросы Delphi 5 06.11.2010 12:47
Вызвать функцию с известной сигнатурой для неизвестного класса. Интерфейс Ferrum26 Общие вопросы Delphi 4 22.07.2010 14:26
Как вызвать метод из другого класса в C# KobolD Помощь студентам 6 25.06.2010 14:12
Как вызвать функцию? blackstersl Общие вопросы Delphi 10 07.06.2009 19:22

Вызов функции одного класса внутри функции другого класса

Как передать функцию, возвращающую некоторую величину из одного класса в качестве переменной в функции, определенной в другом классе. На данный момент мой код выглядит примерно так:

float A::decay()< B b; float N; const int HL=946; const int G=126; float T; if(b.min()>0) < T=(float)(b.min()-G)/HL; N=pow(2,-T); >return N; > int B::min() < int min=dtim[0][0][0]; for(int i=0;i> > return min; > 

При попытке вызова функции min() в decay(), min всегда равен нулю.
Отслеживать
13.7k 12 12 золотых знаков 43 43 серебряных знака 75 75 бронзовых знаков
задан 14 июл 2016 в 11:56
11 1 1 серебряный знак 2 2 бронзовых знака
вам известно что такое указатель на функию ?
14 июл 2016 в 12:08
@ampawd не отказался бы от объяснения на примере данного кода
14 июл 2016 в 12:15

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

По указателю, очевидно.

Но проще передать указатель на класс, и уже оттуда вызвать нужный метод.

float A::decay(B * b)< // B b; - это больше не нужно . здесь без изменений if (b->min()>0)< . 

Отслеживать
ответ дан 14 июл 2016 в 12:13
Alexey Esaulenko Alexey Esaulenko
323 1 1 серебряный знак 13 13 бронзовых знаков

У вас проблема скорее в вычислении min , а не в передаче функции. Вернее, не в передаче, а вызове. Вы не делаете ничего сверхъестественного. Код ниже - упрощенная версия вашего. Но что такое у вас dtim , какие там значения и т.д. и т.п. - этого же мы не знаем! Потом, у вас в decay создается объект B конструктором по умолчанию - так и надо? Может, в этом b все элементы dtim - нулевые?

Другое дело, если вам действительно надо передать функцию-член одного класса в другую.

Отслеживать
ответ дан 14 июл 2016 в 12:12
219k 15 15 золотых знаков 119 119 серебряных знаков 230 230 бронзовых знаков
второй вариант, вычисляемые значения min верны, при вызове печати из класса B
14 июл 2016 в 12:14

@robado Знаете, приведите все же какой-то минимальный самодостаточный пример - ru.stackoverflow.com/help/mcve

Как правильно вызвать функцию другого класса?

Adamos

Очень не советую использовать callback-и (да и большую часть других плюшек С++ последних стандартов) раньше, чем научитесь обходиться без них. Передавайте объекты, используйте более традиционные методы. Когда сможете написать все без callback-ов и потратите на отладку этого кода меньше, чем на написание - тогда можно смело с ними знакомиться и использовать. Начнете с них - превратите свой код в минное поле и не сможете понять, где рвануло и почему.

Решения вопроса 2

MrNexeon

Это называется функция обратного вызова, или Сallback

Существует достаточно много способов для реализации коллбеков, но самым современным решением в C++ является функтор.

Функтор, или функциональный объект - это просто класс с перезагруженным оператором () . Стандартная библиотека уже включает в себя интерфейс для удобного создания и использования функторов - std::function

#include void deleteAllItems(int); // foo; // 

Ответ написан более трёх лет назад
Нравится 2 2 комментария
Евгений Шатунов @MarkusD Куратор тега C++

Pavel Tananykhin , это ответ на твой вопрос. 🙂

Так же советую использовать библиотеку libsigc++, которая по своей сути является отщеплением и развитием Boost signals. Она простая в освоении, удобная в использовании и быстрая в работе.
libsigc.sourceforge.net/index.shtml
https://developer.gnome.org/libsigc++-tutorial/stable/

Евгений Шатунов @MarkusD Куратор тега C++

А. кстати. Еще неплохо будет добавить пример использования функторов для вызова this-call функций.

Пример использования.
cpp.sh/2fuxm

"I'm here to consult you" © Dogbert

В другом классе я создаю указатель для этой функции.
void(InventoryContainer::*fnDelete)(unsigned int);
Но при попытке вызвать эту функцию,
this->fnDelete(this->IFrom);
студия показывает мне что this в данном случае не корректен.

1. Как правильно вызвать функцию?

Правильно показывает. fnDelete должен быть вызван для объекта класса InventoryContainer, и синтаксис разыменования указателя на функцию-член малость другой:

InventoryContainer *that; . (that->*fnDelete)(IFrom);

2. Где то на StackOverflow видел,что для вызова такой функции нужен ещё объект.Не лучше ли тогда просто передать ссылку на объект и через него и вызвать функцию?

Смысл указателя на функцию-член в том, что он даёт возможность вызывать любую функцию с такой сигнатурой в данном объекте. Т.е. для динамического выбора:

class A < public: void f1(); void f2(); >; void (A::*f)(); if (. ) f = &A::f1; else f = &A::f2; . A *pa; . (pa->*f)(); // вызывает f1 или f2

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *