c – 如何创建包含自身列表的结构?
发布时间:2020-12-16 03:41:44 所属栏目:百科 来源:网络整理
导读:我想创建一个包含相同结构列表的结构,如下所示: #include liststruct Url{ CString strUrl; std::listUrl children;};int main(){ Url u1,u2; u1.children.push_back(u2);} 此代码未编译.但是当我用std :: vector替换std :: list时它工作正常.如何使用std :
我想创建一个包含相同结构列表的结构,如下所示:
#include <list> struct Url { CString strUrl; std::list<Url> children; }; int main() { Url u1,u2; u1.children.push_back(u2); } 此代码未编译.但是当我用std :: vector替换std :: list时它工作正常.如何使用std :: list? 输出窗口包含以下错误. c:program filesmicrosoft visual studiovc98includelist(29) : error C2079: '_Value' uses undefined struct 'Url' E:testTest.cpp(23) : see reference to class template instantiation 'std::list<struct Url,class std::allocator<struct Url> >' being compiled c:program filesmicrosoft visual studiovc98includefunctional(185) : error C2079: 'value' uses undefined struct 'Url' c:program filesmicrosoft visual studiovc98includelist(285) : see reference to class template instantiation 'std::binder2nd<struct std::not_equal_to<struct Url> >' being compiled E:testTest.cpp(23) : see reference to class template instantiation 'std::list<struct Url,class std::allocator<struct Url> >' being compiled 解决方法
如果您需要一个似乎是VC6错误的工作区,请动态创建列表:
#include <list> #include <string> // I don't use MFC struct Url { std::string strUrl; std::list<Url> * children; Url() { children = new std::list <Url>; } ~Url() { delete children; } }; int main() { Url u1,u2; u1.children->push_back(u2); } 有些人问为什么允许与成员使用相同类型的列表(在我看来是这样的) Url array[5]; 例如,作为成员不会.我也无法在标准中找到任何内容,但sizeof(std :; list< T>)并不依赖于它的列表.假设列表实现为(这里有一些伪C): list <T> { listEntry <T> * first; }; 然后没有未知的大小来处理.考虑以下解决提问者问题的最小代码: template <typename T> struct A { }; struct B { A <B> b; }; 我看不出任何可能的原因,这不应该是合法的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |