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

Вызов функции одного класа в другом - C++

Восстановить пароль Регистрация
 
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
02.12.2012, 00:32     Вызов функции одного класа в другом #1
Доброго времени суток всем! Столкнулся с такой проблемой, не судите строго, только начал изучать ООП и тут возникла трабла...
Есть 2 класса CTelephonNumber и COutTownZvonok. В CTelephonNumber нужно вызвать функцию-член из COutTownZvonok. Нашел в интернете информацию, но что-то выдает ошибку...

Вот код:

C++
1
2
3
4
5
double CTelephonNumber::Max_L()
{
    typedef bool (COutTownZvonok::*vuzov)(COutTownZvonok* &, COutTownZvonok* &) = 
        &COutTownZvonok::sravn;
}
И тут выдает ошибку:
error C2513: 'bool (__thiscall COutTownZvonok::* )(COutTownZvonok *&,COutTownZvonok *&)' : no variable declared before '='
error C2440: 'initializing' : cannot convert from 'bool (__thiscall COutTownZvonok::* )(void)' to 'bool (__thiscall COutTownZvonok::* )(COutTownZvonok *&,COutTownZvonok *&)'

Заранее благодарю!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.12.2012, 01:11     Вызов функции одного класа в другом #2
Цитата Сообщение от yoghurt92 Посмотреть сообщение
typedef bool (COutTownZvonok::*vuzov)(COutTownZvonok* &, COutTownZvonok* &) =
&COutTownZvonok::sravn;
Мне становится страшно, я не могу понять, что ты хотел этим сказать. Особенно я не представляю зачем здесь тайпдеф.
Ок, ты плохо знаешь классы и С++, не беда. Но чистый Си же ты должен был изучать? Зачем определять в этом месте какой-то тип, имя которого я найти затрудняюсь? Зачем использовать какой-то знак = ?
Обоснуй назначение хоть одного слова/знака в этом коде!
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.12.2012, 01:36     Вызов функции одного класа в другом #3
Цитата Сообщение от yoghurt92 Посмотреть сообщение
В CTelephonNumber нужно вызвать функцию-член из COutTownZvonok.
Она должна быть статической.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
02.12.2012, 01:47  [ТС]     Вызов функции одного класа в другом #4
я нашел пример этого на каком-то форуме, и переделал для своего варианта... В классе COutTownZvonok есть функция которая получает 2 аргумента и сравнивает их, в результате она возвращает true или false... теперь мне нужно вызвать эту функцию в классе CTelephonNumber... Хотел сделать указатель на эту функцию и потом вызвать ее, но что-то не получается... CTelephonNumber и COutTownZvonok связаны агрегацией... в CTelephonNumber находится вектор с указателями на элементы COutTownZvonok...

вот тут смотрел http://dslev.narod.ru/PointersToMembers.html
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.12.2012, 01:49     Вызов функции одного класа в другом #5
yoghurt92, может стоит читать, что вам пишут.
Цитата Сообщение от go Посмотреть сообщение
Она должна быть статической.
Т.е. метод должен быть статическим.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
02.12.2012, 01:54  [ТС]     Вызов функции одного класа в другом #6
Цитата Сообщение от go Посмотреть сообщение
yoghurt92, может стоит читать, что вам пишут.

Т.е. метод должен быть статическим.
а это тогда что:
CTestP obj; //объект
CTestP* pObj = &obj; //указатель на объект

//объявление указателя на функцию
void (CTestP::*pfun)(int)= &CTestP::funTest;

//вызов не статической функции по указателю, объявленному локально
(obj.*pfun)(55);
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.12.2012, 02:12     Вызов функции одного класа в другом #7
Можно еще ухитриться http://ideone.com/kbqYkv
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
 
 
class A
{
public:
    bool Equal(int a, int b)
    {
        return a == b;
    }
};
 
class B
{
public:
    void foo()
    {
        std::cout << A().Equal(1, 1) << std::endl;
    }
};
 
int main()
{
    B b;
    b.foo();
}
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
02.12.2012, 02:12     Вызов функции одного класа в другом #8
yoghurt92, не нужны никакие указатели. Просто делаете нужный метод статическим и вызываете его
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11807 / 6786 / 767
Регистрация: 27.09.2012
Сообщений: 16,839
Записей в блоге: 2
Завершенные тесты: 1
02.12.2012, 02:12     Вызов функции одного класа в другом #9
Цитата Сообщение от yoghurt92 Посмотреть сообщение
(obj.*pfun)(55);
Вы вызываете функцию-член объекта obj.
Не проще
C++
1
obj.funTest(55)
Если функция статическая, то создавать объект не нужно:
C++
1
CTestP::funTest(55);
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
02.12.2012, 12:04  [ТС]     Вызов функции одного класа в другом #10
Спасибо вам всем, буду пробывать!

Добавлено через 24 минуты
Цитата Сообщение от go Посмотреть сообщение
Можно еще ухитриться http://ideone.com/kbqYkv
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
 
 
class A
{
public:
    bool Equal(int a, int b)
    {
        return a == b;
    }
};
 
class B
{
public:
    void foo()
    {
        std::cout << A().Equal(1, 1) << std::endl;
    }
};
 
int main()
{
    B b;
    b.foo();
}
А что делается в этой строчке A().Equal(1, 1), А()- ? Заранее благодарю за ответ)
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.12.2012, 13:33     Вызов функции одного класа в другом #11
Цитата Сообщение от Croessmah Посмотреть сообщение
Если функция статическая, то создавать объект не нужно:
Ну, читая задание, можно сделать вывод.
Цитата Сообщение от yoghurt92 Посмотреть сообщение
Вызов функции одного класа в другом
Наследуйтесь от него.

Добавлено через 49 секунд
Цитата Сообщение от yoghurt92 Посмотреть сообщение
А что делается в этой строчке A().Equal(1, 1), А()- ? Заранее благодарю за ответ)
Вызывается конструктор. Объект создается на стеке, а не в куче.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
25.12.2012, 18:40     Вызов функции одного класа в другом #12
Цитата Сообщение от Croessmah Посмотреть сообщение
Если функция статическая, то создавать объект не нужно:
Можно и ухитриться. Когда-то видел так вызывали
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
 
class Test
{
public:
   Test()
   {
      std::cout << "Test::Test()" << std::endl;
   }
   
   void foo()
   {
      std::cout << "Test::foo()" << std::endl;
   }
   
   ~Test()
   {
      std::cout << "Test::~Test()" << std::endl;
   }
};
 
int main()
{
   Test* p = (Test *) 1;
   ((Test *) 1)->foo();
}
http://liveworkspace.org/code/MjEzMD$0

Добавлено через 42 секунды
Цитата Сообщение от go Посмотреть сообщение
Test* p = (Test *) 1;
Т.е. можно и так
C++
1
p->foo();
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2012, 18:42     Вызов функции одного класа в другом
Еще ссылки по теме:

C++ Вызов функции в другом исполняемом файле
C++ Как вызвать метод одного класса в другом?
C++ Использование очереди (queue) одного класса в другом

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
25.12.2012, 18:42     Вызов функции одного класа в другом #13
Цитата Сообщение от yoghurt92 Посмотреть сообщение
CTelephonNumber нужно вызвать функцию-член из COutTownZvonok. Нашел в интернете информацию, но что-то выдает ошибку...
Функция статическая, или обычная? Какая у неё видимость?
Yandex
Объявления
25.12.2012, 18:42     Вызов функции одного класа в другом
Ответ Создать тему
Опции темы

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