Shi*_*C G 6 c++ stl visual-c++-6
我想创建一个包含相同结构列表的结构,如下所示:
#include <list>
struct Url
{
CString strUrl;
std::list<Url> children;
};
int main()
{
Url u1, u2;
u1.children.push_back(u2);
}
Run Code Online (Sandbox Code Playgroud)
此代码未编译.但当我std::list用std::vector它替换它工作正常.我该如何使用std::list?
输出窗口包含以下错误.
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
Run Code Online (Sandbox Code Playgroud)
小智 6
如果您需要一个似乎是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);
}
Run Code Online (Sandbox Code Playgroud)
有些人问为什么允许与成员使用相同类型的列表(在我看来是这样的)
Url array[5];
Run Code Online (Sandbox Code Playgroud)
例如,作为成员不会.我也无法在标准中找到任何内容,但sizeof( std:;list <T>)不依赖于它的列表.假设列表实现为(这里有一些伪C++):
list <T> {
listEntry <T> * first;
};
Run Code Online (Sandbox Code Playgroud)
然后没有未知的大小来处理.考虑以下解决提问者问题的最小代码:
template <typename T> struct A {
};
struct B {
A <B> b;
};
Run Code Online (Sandbox Code Playgroud)
我看不出任何可能的原因,这不应该是合法的.
你能告诉我们你使用的编译器吗?你正在做的事情本身没有任何错误.我在VS2008 SP1上尝试了以下内容,它编译没问题
#include <list>
struct Url
{
std::string name;
std::list<Url> children;
};
int _tmain(int argc, _TCHAR* argv[])
{
Url u1,u2;
u1.children.push_back(u2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您是否忘记列入清单?
编辑
OP正在使用Visual Studio 6.0,而Neil能够确认它确实是VS6中的一个错误
| 归档时间: |
|
| 查看次数: |
2601 次 |
| 最近记录: |