模板 C++ 类中的 typedef 在定义类的外侧时不起作用?

typedef in template c++ class doen't work when define out side of class?

本文关键字:不起作用 C++ typedef 模板 定义      更新时间:2023-10-16

我也试图在我的模板c++中使用typedef,但它不起作用,我不知道如何修复它。

template <typename object>
class MyVector
{
public:
    typedef object* iter;
    iter begin();
};
template <typename object>
iter MyVector<object>::begin() //here is problem
{
}

你能告诉我为什么不工作吗?

iter在上下文中没有任何意义,您需要显式地限定它:

template <typename object>
typename MyVector<object>::iter MyVector<object>::begin()
{
}

在c++ 11中可以使用尾随返回类型:

template <typename object>
auto MyVector<object>::begin() -> iter
{
}

因为编译器不知道当它遇到令牌iter时必须在MyVector<object>中搜索iter。显式地为iter提供作用域,如下所示:

template <typename object>
typename MyVector<object>::iter MyVector<object>::begin() //here is problem
{
}

试试下面的

template <typename object>
class MyVector
{
public:
    typedef object* iter;
    iter begin();
};
template <typename object>
typename MyVector<object>::iter MyVector<object>::begin() //here is problem
{
}

Typename iter是类MyVector的成员,您必须使用语法来访问类成员。

iter就像你的示例中的内部类型你需要在主类之外的任何使用之前指定主类类型:

MyVector<object>::iter