Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ninja2
814 / 188 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
#1

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

06.07.2015, 13:14. Просмотров 386. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка при определении макроса (C++):

Ошибка при определении массива - C++
#pragma hdrstop #pragma argsused #ifdef _WIN32 #include &lt;tchar.h&gt; #else typedef char _TCHAR; #define _tmain main ...

Синтаксическая ошибка при определении массива - C++
Не определяется массив int choiceLevel (); int main () { string answer; int level= choiceLevel (); while (answer!=&quot;exit&quot;) {...

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

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

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

Ошибка в определении структуры - C++
Здравствуйте. Я только начал изучать структуры и не могу понять в чем ошибка. struct event { char start_time; char stop_time; ...

5
DrOffset
7517 / 4513 / 1025
Регистрация: 30.01.2014
Сообщений: 7,362
06.07.2015, 13:15 #2
Цитата Сообщение от ninja2 Посмотреть сообщение
C++
1
2
#define CLSID_CSpaceship 1; 
#define IID_IMOtion 2;
Точки с запятой убери.
1
ninja2
814 / 188 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
06.07.2015, 14:04  [ТС] #3
Цитата Сообщение от DrOffset Посмотреть сообщение
Точки с запятой убери.
ага
0
rikimaru2013
C++ Game Dev
2471 / 1140 / 241
Регистрация: 30.11.2013
Сообщений: 3,709
06.07.2015, 14:17 #4
C++
1
(void**)&pMot
а почему передаём "нечто" то? Почему не передавать интерфейсный указатель
0
ninja2
814 / 188 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
07.07.2015, 15:45  [ТС] #5
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
а почему передаём "нечто" то? Почему не передавать интерфейсный указатель
Типо несколько интерфейсов будет, указатели могут быть на разные интерфейсы, а функция одна.
0
rikimaru2013
C++ Game Dev
2471 / 1140 / 241
Регистрация: 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
Привет! Вот еще темы с ответами:

Ошибка в определении структурного типа - C++
В строке 40 выдает ошибку &quot;error C2440: 'initializing' : cannot convert from 'int' to 'char *'. Помогите, пожалуйста, исправить ее ...

Ошибка в определении типов чисел - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using namespace std; int main() { double x, y,...

Ошибка в определении шаблонного метода - C++
Подскажите пожалуйста, что делаю не так в определении шаблонного метода. Вот код: // test.cpp #include &lt;iostream&gt; #include...

Ошибка в определении стандартной API функции - C++
Переписываю Бота по уроку из Ютьюба. Сейчас первый тест бота. Суть - найти в окне приложения определенный цвет пикселя и поместить туда...


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

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

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