Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,239
Записей в блоге: 2
1

Вызов статического метода из другого класса

09.04.2015, 14:04. Показов 1855. Ответов 9
Метки нет (Все метки)

Добрый день.
Есть MAIN.cpp:
C++ (Qt)
1
2
3
4
5
STDMETHODIMP CMAIN::Function1(VARIANT Data,BYTE* pBuff)
{
        ..........
    return x;
}
И MAIN.h:
C++
1
2
3
4
5
6
7
8
..........
[id(1), helpstring("method Function1")] 
    HRESULT Function1([in] VARIANT Data, [out,retval] BYTE* pBuff);
..........
HRESULT Function1(VARIANT Data,BYTE* pBuff);
..........
 STDMETHOD(Function1)(VARIANT Data,BYTE* pBuff);
..........
Это работает.
Пытаюсь создать функцию:
C++
1
2
3
4
STDMETHODIMP СMAIN::GetStoC()
{
    return 43;
}
Вместо 43 глобальная переменная будет. Но когда я пытаюсь использовать эту функцию из другого класса, например
C++
1
2
3
4
public int abc()
    {
         return (int)_main.GetStoC();
    }
то выдает ошибку "тип void нельзя конвертировать в int" или вообще "HRESULT CMAIN::GetStoC(void)' : member function already defined or declared".
Что я делаю не так, в чем моя ошибка?
Спасибо
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2015, 14:04
Ответы с готовыми решениями:

Вызов метода другого класса
#include<iostream> using namespace std; class A { public: void Show() { cout << "A" << endl;...

Вызов метода класса из метода другого класса
Помогите школнегу Имеется несколько классов class Com { protected: unsigned char bufrd,...

Передача метода класса в качестве параметра для метода другого класса
Здравствуйте, Передо мной стоит такая задача. Необходимо разработать механизм, который бы мог...

Получить адрес не статического метода класса
Можно ли получить адресс не статического метода класса (статического можно - пробовал).

9
Модератор
Эксперт С++
11288 / 9277 / 5565
Регистрация: 18.12.2011
Сообщений: 24,767
09.04.2015, 14:08 2
C++
1
2
3
4
5
6
7
8
static STDMETHODIMP CMAIN::GetStoC()
{
    return 43;
}
 int abc()
 {
     return (int)CMAIN::GetStoC();
 }
1
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,239
Записей в блоге: 2
09.04.2015, 14:12  [ТС] 3
zss, "'HRESULT CMAIN::GetStoC(void)' : member function already defined or declared" в h файле
0
Модератор
Эксперт С++
11288 / 9277 / 5565
Регистрация: 18.12.2011
Сообщений: 24,767
09.04.2015, 14:54 4
Вот в h файле и добавьте к этой функции префикс static
1
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,239
Записей в блоге: 2
10.04.2015, 05:40  [ТС] 5
zss, прописал в hфайле
C++
1
 static STDMETHOD(GetStoC)();
, отвечает 'virtual' cannot be used with 'static'
0
2544 / 1203 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
10.04.2015, 06:12 6
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
27
// A.h
#pragma once
 
class A
{
public:
    static int foo();
};
 
// A.cpp
#include "A.h"
 
int A::foo()
{
    return 43;
}
 
 
// main.cpp
#include "A.h"
#include <iostream>
using namespace std;
 
int main()
{
    cout << A::foo() << endl;
}
Добавлено через 11 минут
2)
C++
1
 static STDMETHOD(GetStoC)();
а надо в *.h
C++
1
2
3
4
class CMAIN
{
static STDMETHOD GetStoC();
}
3) если метод уже virtual и используется в полиморфизме, то его не сделать еще к прибавку static - компилятор намекает
1
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,239
Записей в блоге: 2
10.04.2015, 08:09  [ТС] 7
Попытаюсь точнее объяснить.
MAIN.h:
C++
1
2
3
4
5
6
7
8
9
10
.......
interface IMain : IDispatch
{
HRESULT GetStoC();
};
.......
class CMain : IMain 
{
 STDMETHOD(GetStoC)();
};
Сам MAIN.cpp:
C++
1
2
3
4
STDMETHODIMP CMain::GetStoC()
{
    return 34;
}
Пытаюсь вызвать в другом классе:
C++
1
2
3
4
5
IMain _main = new CMain();
public int abc()
    {
         return (int)_main.GetStoC();
    }
Выдает ошибку "Cannot convert type 'void' to 'int'" в строке "return (int)_main.GetStoC();".
0
Модератор
Эксперт С++
11288 / 9277 / 5565
Регистрация: 18.12.2011
Сообщений: 24,767
10.04.2015, 19:04 8
У Вас STDMETHODIMP определено как void.
А void к int не приводится.
1
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,239
Записей в блоге: 2
10.04.2015, 19:08  [ТС] 9
zss, а как решить вопрос?
В этих же классах другие функции вытягивают byte. А я int не могу.
0
Модератор
Эксперт С++
11288 / 9277 / 5565
Регистрация: 18.12.2011
Сообщений: 24,767
10.04.2015, 19:24 10
А почему нельзя написать сразу
C++
1
2
3
4
int CMain::GetStoC()
{
    return 34;
}
или
C++
1
#define STDMETHODIMP  int
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2015, 19:24

Классы: как из статического метода обратиться к статической переменной класса
Классы: как из статического метода обратиться к статической переменной класса

Вызов метода объекта внутри определения метода другого объекта(вложенные классы)
Как мне вызвать метод объекта slider класса Slider внутри определения метода объекта класса...

Вызов метода производного класса через обращение к методу базового класса
Добрый день. Изучаю основы ООП, наткнулся на проблему. Если создавать классы внутри main.cpp,...

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.