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

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

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

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

06.07.2015, 21:22. Просмотров 213. Ответов 2
Метки нет (Все метки)

Здорова!
Есть код функции:
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?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2015, 21:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка в функции (C++):

А почему ошибка, что функции print и read не определены в функции main()? - C++
Что-то не понимаю. Они определены в заголовочном файле. А подчеркивается красным что нет.... #include &lt;iostream&gt; #include...

Ошибка в шаблоне функции: "Отсутствуют экземпляры шаблон функции, соответствующие списку аргументов" - C++
#include &lt;iostream&gt; #include &lt;iterator&gt; #include &lt;map&gt; #include &lt;Windows.h&gt; #include &lt;functional&gt; #include &lt;string&gt; #include...

Ошибка в функции - C++
Вот программа проблема с функцией &quot;ras&quot; не правильно работает надо вернуть значения vi,vj,v. #include &lt;stdio.h&gt; #include &lt;conio.h&gt; ...

Ошибка в функции - C++
У меня значения j должен изменятся от 0 до 9, а вместо этого он изменяется от 11 до 20, почему? Мой код: #include &lt;iostream&gt; ...

Ошибка в Функции - C++
#include &lt;iostream.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; #include &lt;iomanip.h&gt; bubbleSort(int , const int); ...

Ошибка в функции! - C++
Господа знатоки, открытое шифрование Эль-Гамаля, функция дешифрования работает не правильно, например я шифрую текст: завтра в 8 часов ,...

2
Max Dark
шКодер самоучка
1840 / 1640 / 597
Регистрация: 09.10.2013
Сообщений: 3,650
Записей в блоге: 6
Завершенные тесты: 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;
1
EugeneQ
1 / 1 / 0
Регистрация: 20.06.2014
Сообщений: 47
06.07.2015, 21:38 #3
Error C2361: пропуск инициализации "Height" из-за метки "default"
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2015, 21:38
Привет! Вот еще темы с ответами:

Ошибка в функции - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;Windows.h&gt; #include &lt;iomanip&gt; using namespace std; char bufUkr; char...

Ошибка в функции - C++
Здравствуйте, уважаемые знатоки! Итак, ящик в студию! Внимательно прочитайте код и найдите ошибки идиота! #include &lt;iostream.h&gt; ...

Ошибка в функции - C++
#include &quot;stdafx.h&quot; #include &quot;stdlib.h&quot; #include &quot;windows.h&quot; #include &quot;iostream&quot; #include &quot;math.h&quot; #include &quot;conio.h&quot; ...

Ошибка в функции - C++
Вот упражнение : Напишите программу, использующую структуру sterling, которая описана в упражнении 10 главы 4. Программа должна получать...


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

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

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