Tôi muốn tạo ra một cấu trúc, trong đó có một danh sách các giống cấu trúc như thế này:Cách tạo cấu trúc chứa danh sách của chính nó?
#include <list>
struct Url
{
CString strUrl;
std::list<Url> children;
};
int main()
{
Url u1, u2;
u1.children.push_back(u2);
}
Mã này không được biên dịch. Nhưng khi tôi thay thế std::list
bằng std::vector
nó hoạt động tốt. Tôi làm cách nào để làm việc này với std::list
?
Cửa sổ đầu ra chứa lỗi sau.
c:\program files\microsoft visual studio\vc98\include\list(29) : error C2079: '_Value' uses undefined struct 'Url'
E:\test\Test.cpp(23) : see reference to class template instantiation 'std::list<struct Url,class std::allocator<struct Url> >' being compiled
c:\program files\microsoft visual studio\vc98\include\functional(185) : error C2079: 'value' uses undefined struct 'Url'
c:\program files\microsoft visual studio\vc98\include\list(285) : see reference to class template instantiation 'std::binder2nd<struct std::not_equal_to<struct Url> >' being compiled
E:\test\Test.cpp(23) : see reference to class template instantiation 'std::list<struct Url,class std::allocator<struct Url> >' being compiled
+1, nhưng như tôi đã nói với JaredPar: Sao bạn tự tin rằng điều này * nên * được cho phép? Bạn chắc chắn không thể khai báo một mảng X bên trong định nghĩa của X (điều này sẽ dẫn đến một cấu trúc dữ liệu vô hạn), vậy tại sao một danh sách được phép? Tôi không thể tìm thấy bất cứ điều gì trong tiêu chuẩn, vì vậy tôi nghĩ rằng thực tế đó là được cho phép trên một số triển khai có lẽ chỉ là một chi tiết thực hiện. Suy nghĩ? –
Cách giải quyết tốt nhất cho lỗi VC6 là sử dụng trình biên dịch được viết bằng millenium này và sau khi ngôn ngữ được chuẩn hóa. ;) – jalf
@j_random_hacker: Nhưng bạn có thể khai báo một con trỏ tới một mảng X bên trong định nghĩa của X (hoặc chỉ là một con trỏ đến X). Và ở đây, anh ta đang lưu một con trỏ vào danh sách. Nhưng tôi không thể nhớ tất cả các chi tiết về thời gian và cách thức loại không đầy đủ được cho phép, do đó, không chắc chắn liệu điều đó có hợp pháp hay không. :) – jalf