Взаимодействие между обьектами через указатель
Есть класс В,который не может быть наследован от А.Обьекту порожденному от класса В надо иметь доступ к function обьекта порожденного от класса А.
Я придумал сделать это через указатель на функцию:
class A
{
public:
A;//Это конструктор
void function (char*,UINT,char*,UINT);
void (*pfunction) (char*,UINT,char*,UINT);//Это указатель
};
A::A//Это конструктор
{
pfunction=&function;//<- ТУТ РУГАЕЦЦО
}
class B
{
public:
void (*pfunction) (char*,UINT,char*,UINT);//Это указатель
};
A ObjectA;
B ObjectB;
B.pfunction=A.pfunction;
Ну естественно не работает. :) В чем ошибка?
Наверняка не так подходишь к решению задачи. Напиши, чего ты этим хочешь добиться.
Поясняю что хочу сделать.Моя программа посылает и принимает данные от сервера(клиент).Я создал класс A в котором хранятся описания сокетов,поток который принимает данные,там же функция которая высылает данные.Обьект от этого класса должен быть один.
Кроме этого у меня есть много классов каждый из которых реализует определенную функцию(высылает определенные данные серверу).Этим классам нужно иметь доступ к функции SendData которая описана в классе A.
Код:
void (A::*pfunction) (char*, UINT, char*, UINT);
Но так делать все же не стоит. Лучше делать через абстрактные интерфейсы.
А судя по описанной тобой задаче, можно обойтись указателем на объект класса и простым методом даже не виртуальным, не говоря уже о указателях.
А зачем тебе в классе В метод-то. он у тебя в А есть
Вот в классе В у тебя будет метод Go
Ты его делаешь как
Код:
int Go(букафки)
{
//Чё-то делаем
А.SendData();//вызываем если SendData статический
//Чё-то делаем
}
{
//Чё-то делаем
А.SendData();//вызываем если SendData статический
//Чё-то делаем
}
Код:
int Go(букафки)
{
//Чё-то делаем
A a();
а.SendData();//вызываем если SendData не статический
//Чё-то делаем
}
{
//Чё-то делаем
A a();
а.SendData();//вызываем если SendData не статический
//Чё-то делаем
}
Цитата: Gfunk
Ну естественно не работает. :) В чем ошибка?
void (A::*pfunction) (char*,UINT,char*,UINT);//Это указатель
Только зачем тебе указатель? Используй виртуальные методы.
Код:
class A
{
public:
A;//Это конструктор
...
};
A::A//Это конструктор
{
pfunction=&function;//<- ТУТ РУГАЕЦЦО
}
{
public:
A;//Это конструктор
...
};
A::A//Это конструктор
{
pfunction=&function;//<- ТУТ РУГАЕЦЦО
}
А где выделенно - не ругаеццо?