Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
ninja2
969 / 188 / 32
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
1

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

06.07.2015, 13:14. Просмотров 407. Ответов 5
Метки нет (Все метки)

Здорова!

Есть код:
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);, то все нормально, а почему не рабоатет через макросы?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2015, 13:14
Ответы с готовыми решениями:

Ошибка при определении массива
#pragma hdrstop #pragma argsused #ifdef _WIN32 #include &lt;tchar.h&gt; #else...

Ошибка при определении переменной в switch
case 2: // почасовые работники - фиксированная плата за 40ч, после 40ч...

Синтаксическая ошибка при определении массива
Не определяется массив int choiceLevel (); int main () { string answer;...

Синтаксическая ошибка при определении метода перегруженного оператора,за классом
Есть два класса. Point1 и Pointer1 Синтаксическая Ошибка в Pointer1.cpp в...

Ошибка при определении класса: undefiner symbol t1,t2,t3,t4 t1 is not a mamber "figura"
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;graphics.h&gt; #include...

5
DrOffset
9014 / 4861 / 1196
Регистрация: 30.01.2014
Сообщений: 7,943
06.07.2015, 13:15 2
Цитата Сообщение от ninja2 Посмотреть сообщение
C++
1
2
#define CLSID_CSpaceship 1; 
#define IID_IMOtion 2;
Точки с запятой убери.
1
ninja2
969 / 188 / 32
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
06.07.2015, 14:04  [ТС] 3
Цитата Сообщение от DrOffset Посмотреть сообщение
Точки с запятой убери.
ага
0
rikimaru2013
C++ Game Dev
2473 / 1141 / 349
Регистрация: 30.11.2013
Сообщений: 3,709
06.07.2015, 14:17 4
C++
1
(void**)&pMot
а почему передаём "нечто" то? Почему не передавать интерфейсный указатель
0
ninja2
969 / 188 / 32
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
07.07.2015, 15:45  [ТС] 5
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
а почему передаём "нечто" то? Почему не передавать интерфейсный указатель
Типо несколько интерфейсов будет, указатели могут быть на разные интерфейсы, а функция одна.
0
rikimaru2013
C++ Game Dev
2473 / 1141 / 349
Регистрация: 30.11.2013
Сообщений: 3,709
07.07.2015, 16:36 6
Цитата Сообщение от ninja2 Посмотреть сообщение
разные интерфейсы, а функция одна.
звучит кастыльно, если разные интерфейсы имеют одно поведение - у них может быть общий родитель интерфейс. Если они разные и вы в методе разной магией определяете какой указатель пришёл - бред. Почему бы уже не сделать перегрузку - но не так) Киндер-сюрприз прям. Что внутри узнаем, только когда покрутили его в руках минут 10

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

И там "в неправильном примере" показано динамическое приведение типов, чтобы понять, что пришло и если одно то довызвать метод.
0
07.07.2015, 16:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2015, 16:36

Ошибка в определении структуры
Здравствуйте. Я только начал изучать структуры и не могу понять в чем ошибка. ...

Ошибка в определении типов чисел
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using namespace...

Ошибка в определении структурного типа
В строке 40 выдает ошибку &quot;error C2440: 'initializing' : cannot convert from...


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

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

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