Vì vậy, tôi đang cố gắng lấy một số mã được viết cho gcc để biên dịch trên Visual Studio 2008. Tôi gặp sự cố mà tôi đã thu hẹp xuống đây:Tại sao khai báo lớp này không hoạt động trên Visual Studio
class value_t
{
public:
typedef std::deque<value_t> sequence_t;
typedef sequence_t::iterator iterator;
};
mã này thất bại:
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'
Tuy nhiên khi tôi thử điều này với std :: vector, nó biên dịch tốt:
class value_t
{
public:
typedef std::vector<value_t> sequence_t;
typedef sequence_t::iterator iterator;
};
Wh có sai không? Tôi đã cố gắng thêm 'typename' ở khắp mọi nơi tôi có thể nghĩ đến, nhưng tại thời điểm này tôi nghĩ nó chỉ là một lỗi trong STL Dinkumware. Bất cứ ai có thể giải thích những gì đang xảy ra, và/hoặc cung cấp một giải pháp? Cảm ơn.
Có "ở khắp mọi nơi bạn có thể nghĩ đến" bao gồm 'typedef typename sequence_t :: iterator iterator;'? – Stephen
Bạn có thể thử khai báo trước trước khi khai báo lớp học. tức là giá trị class_t; –
Điều này luôn xảy ra - ngay sau khi tôi đăng câu hỏi này, tôi tìm thấy sự kết hợp ma thuật trong google để cung cấp cho tôi thứ gì đó có liên quan. Xem http://www.gamedev.net/community/forums/topic.asp?topic_id=295828 thảo luận về chủ đề này; vẫn không cung cấp giải pháp. Ai đó có thể xác nhận rằng việc sử dụng deque trong tình huống này là không chuẩn? Có cách nào để làm việc này mà không thay đổi tệp? –
Roel