【问题标题】:C++ template + typedefC++ 模板 + typedef
【发布时间】:2010-12-21 17:45:09
【问题描述】:

以下代码有什么问题:

Point2D.h

template <class T> 
class Point2D 
{     
   private:
         T x;
         T y; 
   ... 
 };

PointsList.h

template <class T>
class Point2D;

template <class T>
struct TPointsList
{
    typedef std::vector <Point2D <T> > Type;
};

template <class T>
class PointsList
{
    private:
            TPointsList <T>::Type points;  //Compiler error
 ...
};

我想创建没有直接类型规范的新用户类型 TPointsList...

【问题讨论】:

  • 能否请您复制错误?
  • 我投票我们不回答,直到他们编辑他们的问题以显示编译器呕吐。
  • @Noah,好吧,我通常会尽量宽容。 @MMS,你好像是这个网站的新手,所以要小心你的问题并尽可能解释清楚,因为人们会投票给你,你会失去积分!
  • -1 因为:1) 没有显示编译器错误,2) 没有显示 TPoints2DList 的声明,3) 伪代码墙,4) 你特别问我们无法编译的代码有什么问题,没有完整的声明,甚至没有构造函数。
  • 发布将编译的完整代码(您遇到的问题除外)

标签: c++ templates typedef


【解决方案1】:

添加typename:

...
typename TPointsList<T>::Type points;
...

见Why do we need typename here?

【讨论】:

    【解决方案2】:

    您是否尝试过使用 typename 关键字?

    template <class T>
    class Points2DList
    {
        private:
                typename TPoints2DList <T>::Type points;  //using the typename keyword
     ...
    };
    

    【讨论】:

      【解决方案3】:

      其他人已经回答了你的问题,但我想,如果你想知道为什么那里需要typename,那么你可能会看到这个话题:

      Use of typename keyword with typedef and new

      【讨论】:

        【解决方案4】:

        这个问题有点不清楚,但您似乎正在尝试实例化 Point2D 的向量,而没有可用的 Point2D 模板的定义。尝试将#include "Point2D.h" 添加到 PointsList.h 的顶部。正如其他回答者所提到的,您还尝试使用没有typename 的合格依赖类型,因此您还应该添加更改行

        TPointsList <T>::Type points;  //Compiler error
        

        到:

        typename TPointsList <T>::Type points;
        

        【讨论】:

          【解决方案5】:

          TPoints2DList 是什么?它没有在任何地方声明。

          现在TPoints2DList 被声明为struct,它被这样引用:

             private:
                      struct TPointsList <T>::Type points;  //should compile now
          

          【讨论】:

          • 即使我没有足够的混蛋来给出错误的答案,无论我发现提出的问题多么烦人。
          • @Noah:嗯?如果添加了 #include &lt;vector&gt;,此更改将使 OP 的代码正常工作。
          • 它当然不应该,即使你找到了一个接受它为有效的编译器。
          • 手头第一个接受修复代码的是 GNU g++ (GCC) 4.4.4。
          • 这样的时刻让我希望有一个-5。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-08-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-02
          相关资源
          最近更新 更多