1

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

请记住,有问题的编译器是:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 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: };

不编译并给出此错误: c:\foo\foo.h(10) : error C2143: syntax error : missing '>' before '{'

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

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

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

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

我尝试尽可能多地对此进行研究,但大多数程序员都知道在线搜索并不那么容易,因为搜索引擎似乎远远受限,甚至没有正则表达式搜索,它就会成为命中或未命中和/或人气竞赛(是足够受欢迎的感兴趣的话题,可以在谷歌等上排名)。

我非常感谢您对此的提示(甚至不提示)回复。我尝试向他人回答问题,即使这对我来说似乎很容易,并尝试记住知识总是从缺乏知识开始。

4

2 回答 2

5

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

试试这个

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

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

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

于 2012-05-08T10:13:21.917 回答
4
class foo : public std::vector<LPTSTR,std::allocator<LPTSTR>>

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

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

于 2012-05-08T10:13:25.600 回答