Здравствуйте Liss1, Вы писали:
L>в классе Класс1 обьявлена статичная функция
L>в другом классе Класс2 эта функция вызывается
L>цель передать указателю m_pSmeta2 в классе2 значение указателя m_pSmeta1
L>из класса1
Статическая функция класса, это просто функция, и про класс можно забыть. То есть, указатель на функции A::f из
class A {
static int f(int n) { return 0; }
};
можно использовать следующим образом
int q(void (*func)(int))
{
return func(12);
}
...
int n = q(A::f);
-Zork
Думать надо ...головой :)
Re[2]: Help!!!!!!!! указатель из статичной функции
Здравствуйте ZORK, Вы писали:
ZORK>Здравствуйте Liss1, Вы писали:
L>>в классе Класс1 обьявлена статичная функция
L>>в другом классе Класс2 эта функция вызывается
L>>цель передать указателю m_pSmeta2 в классе2 значение указателя m_pSmeta1
L>>из класса1
ZORK>Статическая функция класса, это просто функция, и про класс можно забыть. То есть, указатель на функции A::f из
ZORK>
ZORK>class A {
ZORK> static int f(int n) { return 0; }
ZORK>};
ZORK>
Я еще раз перечитал вопрос, и не уверен что я на него ответил. Так что было бы полезнее рассказать другими словами, что нужно. Варианты, которые у меня возникли:
— нужно передать указатель на интерфейс, а потом вызывать функцию этого интерфейса
— нужно из статической функции вызвать нестатический метод и/или использовать нестатические данные класса
— или все-таки передать поинтер на класс, что-б потом вызвать его статический метод. Что не возможно, но можно передать указатель на статический метод класса, а потом его вызвать, как я показал это в первом варианте ответа
-Zork
Думать надо ...головой :)
Re[3]: Help!!!!!!!! указатель из статичной функции
Здравствуйте ZORK, Вы писали:
ZORK>Здравствуйте ZORK, Вы писали:
ZORK>>Здравствуйте Liss1, Вы писали:
L>>>в классе Класс1 обьявлена статичная функция
L>>>в другом классе Класс2 эта функция вызывается
L>>>цель передать указателю m_pSmeta2 в классе2 значение указателя m_pSmeta1
L>>>из класса1
ZORK>>Статическая функция класса, это просто функция, и про класс можно забыть. То есть, указатель на функции A::f из
ZORK>>
ZORK>>class A {
ZORK>> static int f(int n) { return 0; }
ZORK>>};
ZORK>>
ZORK>>-Zork
ZORK>Я еще раз перечитал вопрос, и не уверен что я на него ответил. Так что было бы полезнее рассказать другими словами, что нужно. Варианты, которые у меня возникли: ZORK>- нужно передать указатель на интерфейс, а потом вызывать функцию этого интерфейса
да именно так те мне нужно чтобы указатель pSmeta2 в классе2 указывал на указатель m_pSmeta1
и впоследствии я мог вызывать из класса2 функции интерфейса ZORK>- нужно из статической функции вызвать нестатический метод и/или использовать нестатические данные класса
и это тоже правильно по отношению к классу1 ZORK>- или все-таки передать поинтер на класс, что-б потом вызвать его статический метод. Что не возможно, но можно передать указатель на статический метод класса, а потом его вызвать, как я показал это в первом варианте ответа
ZORK>-Zork
Re[4]: Help!!!!!!!! указатель из статичной функции
Здравствуйте Liss1, Вы писали:
ZORK>>- нужно передать указатель на интерфейс, а потом вызывать функцию этого интерфейса L>да именно так те мне нужно чтобы указатель pSmeta2 в классе2 указывал на указатель m_pSmeta1 L>и впоследствии я мог вызывать из класса2 функции интерфейса
Если нужен интерфейс, то функции надо описывать как виртуальные, так как тогда виртуальная таблица виртуальных методов будет их объединять, а статические функции, это просто функции, и между ними практически ничего общего, ну кроме начал подписи (signature), которая есть имя класса. На всякий случай пример кода:
interface I1 {
virtual void method1(int n) = 0;
virtual int method2(char* str) = 0;
};
class A : public I1 {
void method1(int n) { ... }
int method2(char* str) { ...}
};
при этом можно делать:
I* abstractInterface = new A();
abstractInterface->method2("Nothing");
ZORK>>- нужно из статической функции вызвать нестатический метод и/или использовать нестатические данные класса L>и это тоже правильно по отношению к классу1
Ну тут надо откуда-то добыть указатель на какой-нить объект этого класса, так как сама статическая функция к объекту не относится. И при этом, важно понимать, что ты все равное не сомжешь вызвать статическую функцию класса, через указательно на объект.
Пример:
class A {
virtual void f(int n) { }
int do(A* obj) {
obj->f();
}
}
...
A* a = new A();
A::do(a);
Здравствуйте Liss1, Вы писали:
L>в классе Класс1 обьявлена статичная функция
L>в другом классе Класс2 эта функция вызывается
L>цель передать указателю m_pSmeta2 в классе2 значение указателя m_pSmeta1
L>из класса1
L>компилятор выдает ошибку
L>error C2597: illegal reference to data member 'Класс1::m_pSmeta' in a static member function
L>такая же ошибка появляется в класс2 при
L>m_pSmeta2 = Класс1::m_pSmeta1;
L>как правильно реализовать присваивание указателей или можно как то это реализовать без использования статичных функций??
Re[4]: Help!!!!!!!! указатель из статичной функции
Здравствуйте Liss1, Вы писали:
L>Здравствуйте ZORK, Вы писали:
ZORK>>Здравствуйте ZORK, Вы писали:
ZORK>>>Здравствуйте Liss1, Вы писали:
L>>>>в классе Класс1 обьявлена статичная функция
L>>>>в другом классе Класс2 эта функция вызывается
L>>>>цель передать указателю m_pSmeta2 в классе2 значение указателя m_pSmeta1
L>>>>из класса1
ZORK>>>Статическая функция класса, это просто функция, и про класс можно забыть. То есть, указатель на функции A::f из
ZORK>>>
ZORK>>>class A {
ZORK>>> static int f(int n) { return 0; }
ZORK>>>};
ZORK>>>
ZORK>>>можно использовать следующим образом
ZORK>>>
ZORK>>>-Zork
ZORK>>Я еще раз перечитал вопрос, и не уверен что я на него ответил. Так что было бы полезнее рассказать другими словами, что нужно. Варианты, которые у меня возникли: ZORK>>- нужно передать указатель на интерфейс, а потом вызывать функцию этого интерфейса L>да именно так те мне нужно чтобы указатель pSmeta2 в классе2 указывал на указатель m_pSmeta1 L>и впоследствии я мог вызывать из класса2 функции интерфейса ZORK>>- нужно из статической функции вызвать нестатический метод и/или использовать нестатические данные класса L>и это тоже правильно по отношению к классу1 ZORK>>- или все-таки передать поинтер на класс, что-б потом вызвать его статический метод. Что не возможно, но можно передать указатель на статический метод класса, а потом его вызвать, как я показал это в первом варианте ответа
ZORK>>-Zork