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

Ошибка при определении макроса - C++

Восстановить пароль Регистрация
 
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
06.07.2015, 13:14     Ошибка при определении макроса #1
Здорова!

Есть код:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;
 
#include <afxwin.h>
 
//#include "class.h"
 
 
//определяем константы
#define CLSID_CSpaceship 1;
#define IID_IMOtion 2;
 
struct IMotion
{
    virtual void Fly()=0;
    virtual int& GetPosition()=0;
};
 
//глобальная функция которая будет возвращать интерфейс
BOOL GetClassObject(int nClsid, int nIid,void** ppvObj)
{
    cout <<"da\r\n";
    return TRUE;
}
 
int main()
{
    setlocale(LC_ALL, "rus_rus.1251");
    IMotion* pMot;
    GetClassObject(CLSID_CSpaceship , IID_IMOtion , (void**)&pMot);
    /*
    int nPos=50;
    pMot->GetPosition()=nPos;
    pMot->Fly();
    nPos=pMot->GetPosition();
    TRACE("новая позиция = %d\n",nPos);
 
    */
    return 0;
}
Он не компилируется, типо ошибку выводит
1> _WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
1>d:\visual studio 2010\projects\com_model\com_model\main.cpp(33): error C2143: синтаксическая ошибка: отсутствие ")" перед ";"
1>d:\visual studio 2010\projects\com_model\com_model\main.cpp(33): error C2660: GetClassObject: функция не принимает 1 аргументов
1>d:\visual studio 2010\projects\com_model\com_model\main.cpp(33): error C2143: синтаксическая ошибка: отсутствие ";" перед ","
1>d:\visual studio 2010\projects\com_model\com_model\main.cpp(33): error C2143: синтаксическая ошибка: отсутствие ";" перед ","
1>d:\visual studio 2010\projects\com_model\com_model\main.cpp(33): error C2059: синтаксическая ошибка: )
1> class.cpp


в этой функции ошибки GetClassObject(CLSID_CSpaceship , IID_IMOtion , (void**)&pMot);
если сделать так GetClassObject(1, 2, (void**)&pMot);, то все нормально, а почему не рабоатет через макросы?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6460 / 3834 / 885
Регистрация: 30.01.2014
Сообщений: 6,629
06.07.2015, 13:15     Ошибка при определении макроса #2
Цитата Сообщение от ninja2 Посмотреть сообщение
C++
1
2
#define CLSID_CSpaceship 1; 
#define IID_IMOtion 2;
Точки с запятой убери.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
06.07.2015, 14:04  [ТС]     Ошибка при определении макроса #3
Цитата Сообщение от DrOffset Посмотреть сообщение
Точки с запятой убери.
ага
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2139 / 972 / 223
Регистрация: 30.11.2013
Сообщений: 3,241
06.07.2015, 14:17     Ошибка при определении макроса #4
C++
1
(void**)&pMot
а почему передаём "нечто" то? Почему не передавать интерфейсный указатель
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
07.07.2015, 15:45  [ТС]     Ошибка при определении макроса #5
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
а почему передаём "нечто" то? Почему не передавать интерфейсный указатель
Типо несколько интерфейсов будет, указатели могут быть на разные интерфейсы, а функция одна.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2139 / 972 / 223
Регистрация: 30.11.2013
Сообщений: 3,241
07.07.2015, 16:36     Ошибка при определении макроса #6
Цитата Сообщение от ninja2 Посмотреть сообщение
разные интерфейсы, а функция одна.
звучит кастыльно, если разные интерфейсы имеют одно поведение - у них может быть общий родитель интерфейс. Если они разные и вы в методе разной магией определяете какой указатель пришёл - бред. Почему бы уже не сделать перегрузку - но не так) Киндер-сюрприз прям. Что внутри узнаем, только когда покрутили его в руках минут 10

Добавлено через 11 минут
в SOLID статье есть кажись подобный случай, когда все вызывают метод print(), а классу SpecialTyper нужен еще и метод makeGraph();

И там "в неправильном примере" показано динамическое приведение типов, чтобы понять, что пришло и если одно то довызвать метод.
Yandex
Объявления
07.07.2015, 16:36     Ошибка при определении макроса
Ответ Создать тему
Опции темы

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