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



我意识到那里有更好的编译器,但我更喜欢坚持使用 vc6,每隔一段时间,我就会发现奇怪的侥幸,想知道这个是本地化到我的安装还是每个人的。

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

尝试声明一个从 std::vector 继承的类,这工作正常,除非您还尝试具体定义第二个模板参数:

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

不编译并给出此错误:c:\foo\foo.h(10(:错误 C2143:语法错误:在"{"之前缺少">">

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

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

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

  1. 做错了什么吗?
  2. 这只发生在我的安装中吗?
  3. 我应该避免解决方法,因为它以后可能会以某种方式导致问题吗?

我试图尽可能多地研究这个问题,但正如大多数程序员所知,在线搜索并不容易,因为搜索引擎似乎远远有限,甚至没有正则表达式搜索,它就会成为命中或错过和/或人气竞赛(感兴趣的话题是否足够受欢迎,可以在 Google 上排名等(。

我提前非常感谢您对这个问题的及时(甚至没有提示(回复。我试着回答别人的问题,即使这对我来说似乎很容易,并试图记住知识总是从缺乏知识开始。

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

试试这个

std::vector<LPTSTR,std::allocator<LPTSTR> >
                                         ^ note space

并阅读为什么从标准库容器继承可能不是一个好主意。

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

class foo : public std::vector<LPTSTR,std::allocator<LPTSTR>>

不编译,因为>>被视为一个标记,您应该用空格分隔右括号。这在第 11 C++ 中得到了修复。

此外,不应从 std 容器继承,因为它们不是为此而设计的(例如,它们没有虚拟析构函数(。

最新更新