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

Кто глючит, я или компайлер? Visual Studio 2008 (9.0) - C++

Восстановить пароль Регистрация
 
Gelium3
0 / 0 / 0
Регистрация: 07.02.2014
Сообщений: 4
07.02.2014, 21:26     Кто глючит, я или компайлер? Visual Studio 2008 (9.0) #1
C++
1
2
3
4
5
6
7
8
class A {int a;};
class B : public A {int b;};
class C : public A {int c;};
void f()
{
    int k = 1;
    A* a = k ? new B : new C;
}
Результат компиляции:
error C2446: ':' : no conversion from 'C *' to 'B *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2014, 21:26     Кто глючит, я или компайлер? Visual Studio 2008 (9.0)
Посмотрите здесь:

C++ [C#] Visual studio 2008 анимация
C++ Зависание или ошибка при компиляции microsoft Visual Studio 2008
Калькулятор на MS Visual Studio 2008 C++ C++
Microsoft Visual studio 2008 C++
C++ Visual studio 2008 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6424 / 3798 / 879
Регистрация: 30.01.2014
Сообщений: 6,591
07.02.2014, 21:33     Кто глючит, я или компайлер? Visual Studio 2008 (9.0) #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Gelium3 Посмотреть сообщение
error C2446: ':' : no conversion from 'C *' to 'B *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Типы в тернарном операторе должны быть приводимы между собой, а не к чему-то третьему.
Вот так будет работать:
C++
1
2
    int k = 1;
    A * a = k ? new B : new A;
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
07.02.2014, 21:38     Кто глючит, я или компайлер? Visual Studio 2008 (9.0) #3
Или же типы можно привести явно:
C++
1
A* a = k ? static_cast<A*>(new B) : static_cast<A*>(new C);
Gelium3
0 / 0 / 0
Регистрация: 07.02.2014
Сообщений: 4
07.02.2014, 21:47  [ТС]     Кто глючит, я или компайлер? Visual Studio 2008 (9.0) #4
Спасибо! Действительно, необходима кроссприводимость, дабы результат подходил всегда, а не в зависимости от использования. Таки я глючил, это успокаивает.
Yandex
Объявления
07.02.2014, 21:47     Кто глючит, я или компайлер? Visual Studio 2008 (9.0)
Ответ Создать тему
Опции темы

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