LINUX.ORG.RU

c++. forward declared typedef


0

2

Здравствуйте.

Есть такое определение типа:

typedef std::pair<int, Pair*> Pair;

Компилятор выдает:

main.cpp:3:24: error: 'Pair' was not declared in this scope
main.cpp:3:29: error: template argument 2 is invalid
main.cpp:3:35: error: invalid type in declaration before ';' token

Нужен forward declaration для Pair, но как его сделать?

Пример искуственный, реально проблема возникла при использовании boost::variant

Ответ на: комментарий от Dendy

Нет, должно получится что-то вроде связного списка. Первый элемент int, второй — указатель на следующую пару.

AST-PM-105
() автор топика

Тайпдеф так не может. Он по сути только декорация и не может вводить новых типов. Можно так:

class Pair: public std::pair<int, Pair*>
{
};
int main()
{
Pair shit1, shit2;
shit1.second=&shit2;      
}

legolegs ★★★★★
()
Ответ на: комментарий от AST-PM-105

Она не бесконечная. В second указатель, а не значение.

typedef - это макрос на уровне типов, фактически ты указываешь сгенерировать бесконечный тип.

Begemoth ★★★★★
()
Ответ на: комментарий от AST-PM-105

Спасибо, такой способ и с boost::variant работает. Хоть и некрасиво.

Что только люди не делают лишь бы структуры не использовать.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

В boost есть готовая реализация union для не-POD типов, зачем городить велосипед?

AST-PM-105
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.