C++ 模板继承问题与基类型

2024-04-21

我有以下代码,但无法编译

template < typename T >
class Base
{
public:

    typedef T * TPtr;

    void func()
    {
    }
};

template < typename T >
class Derived : public Base< T >
{
public:
    using Base< T >::TPtr;
    using Base< T >::func;

    TPtr ptr;
};

int main( int c, char *v[] )
{
    Derived< int > d;
    d.func();
}

编译器发出以下命令。

t.cpp:16: error: 'TPtr' does not name a type
t.cpp:16: note: (perhaps 'typename Base<T>::TPtr' was intended)

现在我知道我可以简单地按照编译器的建议进行操作,但我不明白为什么

    using Base< T >::TPtr;

不起作用。

如果我注释掉“TPtr ptr”行然后编译,证明“using Base< T >::func;” 声明有效。

有任何想法吗?


Base< T >::TPtr是一个所谓的附属名称所以你需要在它前面加上前缀typename使声明发挥作用。

此外,using不适用于typename所以你需要使用typedef反而:

typedef typename Base<T>::TPtr TPtr;

问题是编译器无法决定——不知道什么T是! - 无论TPtr在这种情况下命名类型或变量/函数。为了避免歧义,它总是假设后者,除非另有明确说明(因此需要typename).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 模板继承问题与基类型 的相关文章

随机推荐

  • 使用 NSValueTransformer 加密 iOS 核心数据

    我正在尝试使用 Core Data 和 CommonCrypto 加密数据 我正在尝试使用 NSValueTransformer 来延迟加密和解密 但是 当我现在尝试将加密数据保存到持久存储协调器时 它失败了 每次我尝试将数据保存到数据库时
  • RecyclerView - 获取 Activity 内的位置而不是 RecyclerView 适配器

    这是我处理视图点击的第三天 我原来用的是ListView 然后我切换到RecyclerView 我已经添加了android onclick我的每个控件的元素row layout我正在处理它们MainActivity像这样 public vo
  • Moment js - 获取日期而不考虑时区

    我确实阅读了不同的 StackOverflow 帖子 他们建议从一开始就使用 utc 但它不起作用 Note 我在 PST 区域 const start 2018 06 10T21 00 00 04 00 const end 2018 06
  • MS2015中的MvcBuildViews需要很长时间

    我们正在转换解决方案以使用新的 Roslyn 编译器 当我在发布模式下通过 teamCity 构建它时 MVCBuildViews 步骤仍然使用 aspnet compiler exe 并且预编译视图需要大约 15 分钟 在 NET 4 5
  • Factory_girl 与 validates_presence_of 有关系

    我有 2 个型号 user rb class User lt ActiveRecord Base has one profile dependent gt destroy end profile rb class Profile lt Ac
  • Linux 中允许的 c/c++ 最大互斥体数量

    我一直在尝试找出 Linux 中 c c 进程的最大互斥体数量是多少 但没有成功 另外 有没有办法修改这个数字 我正在读的书提到了如何找到Linux中允许的最大线程数以及如何修改这个数字 但没有提到互斥体 检查这个pthread mutex
  • Django Postgresql 在迁移时删除列默认值

    我面临表默认值的问题 例如我有这个模型 class model1 models Model field1 models CharField max length 50 default My Default Value 1 db column
  • 如何完全静音 bash 脚本中的 vlc 输出?

    我有一个为自己编写的脚本 它在接近结束的地方使用 vlc 我需要它停止输出它想要的任何内容 但保留我自己的输出 所以没有 清除 我使用了参数 q 和 no sout x264 quiet 但无济于事 它仍然输出丑陋的消息 即 警告 调用 r
  • 使用两个具有相同命名空间的 .NET 库

    我目前正在为一家公司维护一些旧代码 正如所发生的那样 我正在修改的当前应用程序使用旧版本的内部库 我们将其称为 Lib1 dll 他们还有一个名为 Lib2 dll 的新版本库 它在许多方面对以前的库进行了改进 不幸的是 Lib2 不向后兼
  • VBS 脚本 getElementbyID 错误(自动登录脚本)

    我正在编写适用于不同站点的 vbs 脚本文件 但我正在为我的大学网页编写用于互联网页面登录的自动登录脚本 所以我一直在工作直到填写用户名和密码 但我无法让它点击登录 这是大学登录的链接 我不确定您是否可以从网络外访问它 请注意编辑请不要将其
  • 从 DataReader 读取数据的通用方法

    我目前正在使用此方法从 DataReader 读取数据 private T GetValue
  • LinkedList“节点跳转”

    试图找出为什么我的list 类指针被第三个节点覆盖 插入函数 如下 中发生的情况是 第三次调用插入函数headByName gt nextByName当第三个节点应该指向第二个节点时 节点指针被第三个节点覆盖 因此 您可以猜测第 4 个节点
  • 使用 Velocity 生成基于 HTML 的电子邮件

    我尝试这个教程http www java2s com Code Java Velocity UseVelocitytogenerateHTMLbasedemail htm http www java2s com Code Java Velo
  • Tensorflow:加载预训练 ResNet 模型时出错

    我想使用 Tensorflow 中预先训练的 ResNet 模型 我下载了code https github com tensorflow models blob master research slim nets resnet v1 py
  • 如何在 Qt 中实现 QHoverEvent?

    我正在学习 Qt 和 C 我已经成功地实现了信号和槽来捕获标准事件 例如ButtonPushed 等等 但是 我希望当我将鼠标悬停在鼠标上并移出鼠标时调用一个函数QLabel 看起来像QHover事件 http doc qt io qt 4
  • Twisted、FTP 和“流式传输”大文件

    我正在尝试实现最能描述为 HTTP API 的 FTP 接口 的内容 本质上 有一个现有的 REST API 可用于管理站点的用户文件 并且我正在构建一个中介服务器 将该 API 重新公开为 FTP 服务器 因此 您可以使用 Filezil
  • 如何正确使用DispatchQueue.main.async?

    我的应用程序中有一个循环 可能需要几秒钟的时间来处理 我希望当循环在后台运行时屏幕立即关闭 这可能吗 我尝试过仅添加循环 DispatchQueue main async for in 1 self numberOfTransactions
  • Maven:从执行元素获取目标配置

    假设我有以下魔力 Mojo name some goal public class MyMojo Parameter required true protected ComplexObject param 另外我在 pom 中有插件的描述符
  • 如何剪辑较大的图像以适合以编程方式构建的 tabBarController 中的 tabBar 图标。

    我以编程方式创建了一个选项卡控制器 现在 我想将图像添加到不同的选项卡 为此我使用了 self tabBarItem image UIImage imageNamed Sample Image png 问题是 Sample image 的大
  • C++ 模板继承问题与基类型

    我有以下代码 但无法编译 template lt typename T gt class Base public typedef T TPtr void func template lt typename T gt class Derive