gpt4 book ai didi

c++ - 模板类中的 Typedef 不起作用

转载 作者:可可西里 更新时间:2023-11-01 17:06:05 24 4
gpt4 key购买 nike

我对以下代码有疑问:

template <typename U>
class lamePtr
{
public:
typedef U* ptr;
};

template <typename U>
class smarterPointer
{
public:
void funFun()
{
typedef lamePtr<U> someType;
someType::ptr query;
}
};

如你所见,我在 lamePtr 中有一个 typedef。在 smarterPointer 类中,我有一个函数 funFun()。我想做的是制作另一个 typedef someType。直到那一行,一切正常,直到我们到达带有 someType::ptr 查询的那一行。

我希望这里发生的是“查询”将变为 lamePtr< U >::ptr(一个简单的值,而不是 typedef ;)。但是,我遇到编译错误(使用 gcc 4.4.3):

temp.cpp: In member function ‘void smarterPointer<U>::funFun()’:
temp.cpp:15: error: expected ‘;’ before ‘query’

我在这里做错了什么?

最佳答案

someType , 作为 lamePtr<U>是一个“从属名”。这取决于什么 U关于有没有成员(member)ptr如果是,该成员是什么类型的“东西”。

当然,知道对于所有 T , lamePtr<T>::ptr是一种类型,但在编译的这个阶段解析器并不知道。

使用the typename keyword向解析器提示它是一种类型。剩下的会在后面的编译过程中解决。只是一点 C++ 怪癖。

template <typename U>
class lamePtr
{
public:
typedef U* ptr;
};

template <typename U>
class smarterPointer
{
public:
void funFun()
{
typedef lamePtr<U> someType;
typename someType::ptr query;
}
};

关于c++ - 模板类中的 Typedef 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5524744/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com