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

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

Войти
Регистрация
Восстановить пароль
 
Gelium3
0 / 0 / 0
Регистрация: 07.02.2014
Сообщений: 4
#1

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

07.02.2014, 21:26. Просмотров 228. Ответов 3
Метки нет (Все метки)

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++ Подсветка кода в Visual studio 2008
C++ Зависание или ошибка при компиляции microsoft Visual Studio 2008
Visual Studio 2008, WinAPI - Openfile C++
компиляция в Microsoft Visual Studio 2008 C++
написать программу в Visual Studio 2008 C++
Конструктор классов, Visual Studio 2008 C++
Переделать код С++ (Visual Studio 2008) C++
C++ Переделать код С++ (Visual Studio 2008)
C++ Не работает код С++ (Visual Studio 2008)
Ищу самоучитель по C++ и visual studio 2008 C++
C++ Портирование из Visual Studio 2008 в Eclipse
Visual Studio 2008 не видит fstream C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6817 / 4028 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
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
Эксперт С++
1599 / 991 / 117
Регистрация: 27.09.2009
Сообщений: 1,910
Завершенные тесты: 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)
Ответ Создать тему
Опции темы

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