VC++ .NET 2002 и частичная специализация (?)
От: al_kotov Украина  
Дата: 18.05.03 00:32
Оценка:
Hi!

Тема, возможно, сформулирована некорректно, но проблема до убожества проста:

#include <list>

using namespace std;

struct t;
list<t> a;

struct t {
  int i;
}

int main( int argc, char *argv[] ) {
    return 0;
}


не компилируется этим VC++ .NET 2002 вообще. Причем VC++ 6.0 SP5 никакого криминала не находит. Как, впрочем, и gcc 3.2.3. В результате чего я уже пару часов в ступоре

Сама по себе проблема возникла из-за того, что в проекте есть две взаимозависимые структуры вида:

struct a;

struct b {
    list<a> data;
};

struct a {
   b data;
};


Чем его стукнуть-то чтобы компилилось? Откатиться на предыдущую версию не могу по лицензионным соображениям, а переписать проблемный участок могу только в ограниченном объеме из-за временных ограничений. Какой-нибудь готовый рецепт есть? А как VC++ .NET 2003 справляется с первым фрагментом кода?

SY,
Alex Kotov
Re: VC++ .NET 2002 и частичная специализация (?)
От: MaximE Великобритания  
Дата: 18.05.03 08:45
Оценка: 1 (1)
Здравствуйте, al_kotov, Вы писали:

AK>
AK>#include <list>

AK>using namespace std;

AK>struct t;
AK>list<t> a;

AK>struct t {
AK>  int i;
AK>}

AK>int main( int argc, char *argv[] ) {
AK>    return 0;
AK>}
AK>


AK>не компилируется этим VC++ .NET 2002 вообще. Причем VC++ 6.0 SP5 никакого криминала не находит. Как, впрочем, и gcc 3.2.3. В результате чего я уже пару часов в ступоре


Стандартные контейнеры запрещено инстанцировать неполными типами.

Подробнее читай Containers of Incomplete Types:

The C++ Standard says that you're not allowed to instantiate a standard library template with an incomplete type: "the effects are undefined ... if an incomplete type is used as a template argument when instantiating a template component." Some implementations do permit it in some circumstances, but that's just an accident. (Remember, "undefined behavior" covers absolutely anything — including things working as you might expect them to!)


... или сделай поиск по форуму по фразе "неполный тип".
Re: VC++ .NET 2002 и частичная специализация (?)
От: Bell Россия  
Дата: 19.05.03 06:34
Оценка:
Здравствуйте, al_kotov, Вы писали:

Так нельзя. Используй list<t*>
Любите книгу — источник знаний (с) М.Горький
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.