这个继承自std :: vector的类声明有什么问题吗?

1 c++ class-design compiler-errors stdvector visual-studio

我意识到有更好的编译器,但我更喜欢坚持使用vc6,每隔一段时间,我发现奇怪的吸虫,并想知道这个是本地化我的安装或每个人的.

请记住,有问题的编译器是:
Microsoft(R)32位C/C++优化编译器版本12.00.8168 for 80x86
(链接器等不相关,因为这个问题似乎不涉及它们)

试图声明一个继承自std :: vector的类,它可以正常工作,除非您还尝试特定于定义第二个模板参数:

10: class foo : public std::vector<LPTSTR,std::allocator<LPTSTR>>
11: {
12:   public:
13:   foo();
14:   ~foo();
15: };
Run Code Online (Sandbox Code Playgroud)

不编译并给出该错误:C:\ FOO\foo.h中(10):错误C2143:语法错误:缺少 '>' 前 '{'

现在,真正的问题是,为什么这是合法的:

10: class foo : public std::vector<LPTSTR,std::allocator<LPTSTR>>> 
11: {
12:   public:
13:   foo();
14:   ~foo();
15: };
Run Code Online (Sandbox Code Playgroud)

注意第>10行末尾的额外内容......我想知道的是:

  1. 没有做错了什么?
  2. 这只发生在我的安装?
  3. 我应该避免使用这种解决方法,因为它可能会在某种程度上导致问题吗?

我试图尽可能多地研究这个问题,但是大多数程序员都知道在线搜索并不是那么容易,因为搜索引擎似乎远没有限制甚至没有正规表达式搜索它会成为命中注定和/或人气竞赛(是一个受欢迎的主题,足以在谷歌上排名等).

我提前感谢你对这个问题的提示(甚至没有提示).我试着回答别人的问题,即使这对我来说似乎很荒谬,并且试着记住知识总是从缺乏知识开始.

jua*_*nza 5

这可能意味着您的编译器没有>>按预期解析符号,即它在这方面不支持C++ 11.

试试这个

std::vector<LPTSTR,std::allocator<LPTSTR> >
                                         ^ note space
Run Code Online (Sandbox Code Playgroud)

并且还了解了为什么从标准库容器继承可能不是一个好主意.

至于"为什么是>>>合法"的问题,嗯,它根本不合法,不是C++ 03,不是C++ 11.我只能得出结论,这是编译器的一个特性.