Więc staram się trochę kodu, który został napisany dla gcc do kompilacji w Visual Studio 2008. Mam problem, że mam zawężony do tego:Dlaczego nie deklaracja ta klasa działa na Visual Studio
class value_t
{
public:
typedef std::deque<value_t> sequence_t;
typedef sequence_t::iterator iterator;
};
Kod ten nie powiedzie się:
1>cpptest.cpp
1>c:\program files\microsoft visual studio 9.0\vc\include\deque(518) : error C2027: use of undefined type 'value_t'
1> c:\temp\cpptest\cpptest.cpp(10) : see declaration of 'value_t'
1> c:\temp\cpptest\cpptest.cpp(13) : see reference to class template instantiation 'std::deque<_Ty>' being compiled
1> with
1> [
1> _Ty=value_t
1> ]
1>c:\program files\microsoft visual studio 9.0\vc\include\deque(518) : error C2027: use of undefined type 'value_t'
1> c:\temp\cpptest\cpptest.cpp(10) : see declaration of 'value_t'
jednak gdy próbuję to z std :: vector, kompiluje grzywny:
class value_t
{
public:
typedef std::vector<value_t> sequence_t;
typedef sequence_t::iterator iterator;
};
Wh jest źle? Próbowałem dodać "typename" wszędzie, gdzie mogę myśleć, ale w tym momencie myślę, że to tylko błąd w Dinkumware STL. Czy ktoś może wyjaśnić, co się dzieje i/lub zaoferować rozwiązanie? Dzięki.
Czy "wszędzie można wymyślić" to 'typedef nazwa_pytału sequence_t :: iterator iterator;'? – Stephen
Możesz wypróbować deklarację forward przed deklaracją klasy. tj. klasa value_t; –
To się zawsze dzieje - zaraz po tym, jak opublikuję to pytanie, znajduję magiczną kombinację w google, aby dać mi coś istotnego. Zobacz http://www.gamedev.net/community/forums/topic.asp?topic_id=295828, który omawia ten temat; nadal nie oferuje rozwiązania. Czy ktoś może potwierdzić, że używanie deque w tej sytuacji jest niestandardowe? Czy istnieje sposób, aby to zadziałało bez zmiany pliku? –
Roel