C++ 模板类的实例作为另一个模板类的成员

史蒂夫

假设我有以下模板化 C++ 类

#include <cstdint>      

template <uint32_t NO_POINTS>
class A
{
public:
  struct Point
  {
    float x;
    float y;
  };

  A(const Point (&points)[NO_POINTS])
  {
      for (uint32_t point = 0; point < NO_POINTS; point++) {
          table[point] = points[point];
      }
  }
  
private:
  Point table[NO_POINTS];
};

我想使用这个类的一个实例作为以下类的私有成员:

#include "A.h"

template <uint32_t NO_LUT_POINTS>
class B
{

public:
  B(A<NO_LUT_POINTS>::Point (&table)[NO_LUT_POINTS]) : lut(table){}

private:
  A<NO_LUT_POINTS> lut;
};

#include "B.h"

int main(int argc, char** argv) {

     B<4> foo({{1326.0, 25.0},   {1601.0, 30.0},   {1922.0, 35.0},   {2293.0, 40.0}});
           
    return 0;
}

我试图编译此代码,但编译器报告以下错误A<NO_LUT_POINTS>::Point is not a type我不明白这个错误的原因是什么。谁能向我解释为什么编译器会报告此错误?

斯宾塞

这是嵌套在模板类中的类型的常见错误。您需要添加typename以告诉编译器这Point是一种类型。

...
public:
  B(typename A<NO_LUT_POINTS>::Point const (&table)[NO_LUT_POINTS]) : lut(table){}
...

但是,除了解决您的问题之外,请注意它Point不依赖于 的模板参数A,因此您不应将其嵌套在该类中。这将消除添加的必要性typename

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++中带有另一个模板类作为参数的构造函数

C ++ dynamic_cast一个模板类到另一个模板

特定基类的抽象类的C ++ Vector,作为另一个类成员

在C ++中,为什么不能使用另一个类的模板类型来与模板类成员函数成为朋友?

C ++将成员函数引用从一个类实例传递到另一个类实例

C ++从另一个类访问类成员

在C ++中的另一个类中使用模板类

C++/ 类实例向量作为另一个类的属性

C ++ 11编译失败,未定义引用,另一个类内部的显式模板类实例化

C ++方法从另一个模板类和名称空间泄漏

C ++需要启用类成员变量来访问另一个类的实例的std :: vector

如何在C ++中的另一个模板函数中使用属于模板化类的嵌套类型?

在另一个类中保存一个类的实例objective-c

我可以通过模板(使用C ++ 17变体)将一个类与另一个类关联吗?

C#让多个类共享另一个类的相同实例

C++:另一个类中的类的实例

C ++:如何从标准布局类模板中优化出一个空的数据成员?

将类的方法作为参数传递给C ++中的另一个类

将指针类方法作为参数传递给另一个类方法C ++

C ++:当两个类包含指向另一个的指针时,如何解决派生类之间的模板循环依赖关系?

将一个类的对象声明为另一个类的成员 (C++)

C++ - 使用指针调用另一个类的成员函数

C ++如何将成员函数指针传递给另一个类?

在另一个类中调用成员函数c ++

iOS / Objective C访问另一个类的数据成员

使用另一个类的类型定义的成员时发生C ++编译错误

从另一个类访问 C# 类

C#从另一个表单创建类的新实例

C#如何访问另一个类创建的List实例