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

Ошибка в функции - C++

Восстановить пароль Регистрация
 
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
06.07.2015, 21:22     Ошибка в функции #1
Здорова!
Есть код функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//глобальная функция которая будет возвращать интерфейс
BOOL GetClassObject(const int nClsid,const int nIid,void** ppvObj)
{
    cout <<"ppvObj="<<&(*ppvObj)<<"\r\n";
    
 
    switch(nIid)
    {
    case IID_IMOtion:
        IMotion* p=new CSpaceship();
        *ppvObj=p;
        break;
    default:
        *ppvObj=nullptr;
        return FALSE;
    }
 
    return TRUE;
}
ну и когда компилирую программу выводится ошибка:
1>d:\visual studio 2010\projects\com_model\com_model\class.cpp(18): error C2361: пропуск инициализации "p" из-за метки "default"
1> d:\visual studio 2010\projects\com_model\com_model\class.cpp(15): см. объявление "p"
1>
1>СБОЙ построения.

Комментирую default все нормально, или если если в самый верх переношу определение p, от так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
BOOL GetClassObject(const int nClsid,const int nIid,void** ppvObj)
{
    cout <<"ppvObj="<<&(*ppvObj)<<"\r\n";
//  IMotion* p=new CSpaceship();
 
    switch(nIid)
    {
    case IID_IMOtion:
        IMotion* p=new CSpaceship();
        *ppvObj=p;
        break;
/*  default:
        *ppvObj=nullptr;*/
        return FALSE;
    }
 
    return TRUE;
}
Почему нельзя делать так как у меня есть в коде выше, че не нравится default?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2015, 21:22     Ошибка в функции
Посмотрите здесь:

C++ Функции. Ошибка(
Ошибка функции C++
C++ ошибка в функции
C++ Ошибка в функции
Ошибка в функции C++
Ошибка в функции C++
Ошибка в функции C++
C++ Ошибка в функции

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
06.07.2015, 21:36     Ошибка в функции #2
Цитата Сообщение от ninja2 Посмотреть сообщение
Почему нельзя делать так как у меня есть в коде выше, че не нравится default?
это из-за области видимости - получается что p объявляется для всего switch а не локальная для case IID_IMOtion и есть варианты прохода, что создание этой переменной пропускается
если нужна переменная внутри case ... break, то определяйте ее в нутри операторных скобок
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//глобальная функция которая будет возвращать интерфейс
BOOL GetClassObject(const int nClsid,const int nIid,void** ppvObj)
{
    cout <<"ppvObj="<<&(*ppvObj)<<"\r\n";
    
 
    switch(nIid)
    {
    case IID_IMOtion: {
        IMotion* p=new CSpaceship();
        *ppvObj=p;
        }
        break;
    default:
        *ppvObj=nullptr;
        return FALSE;
    }
 
    return TRUE;
}
В вашем случае можно обойтись без этой переменной
C++
1
2
3
4
case IID_IMOtion: {
        *ppvObj=new CSpaceship();
        }
        break;
EugeneQ
1 / 1 / 0
Регистрация: 20.06.2014
Сообщений: 37
06.07.2015, 21:38     Ошибка в функции #3
Error C2361: пропуск инициализации "Height" из-за метки "default"
Yandex
Объявления
06.07.2015, 21:38     Ошибка в функции
Ответ Создать тему
Опции темы

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