C++ vector<T> 其中 T 是类中的结构

Posted

技术标签:

【中文标题】C++ vector<T> 其中 T 是类中的结构【英文标题】:C++ vector<T> where T is a struct inside a class 【发布时间】:2016-10-25 03:42:07 【问题描述】:

我有一个如下所示的课程:

template<typename T>
class MyContainer


public:

    struct Handle
    
        public:

            T* Resolve();
    ;

private:

    vector<Handle> mHandles;

;

当我使用时,他们似乎不会为句柄编译迭代器:

vector<Handle>::iterator iter = mHandles.begin();

如果我将其更改为自动,它可以工作:

auto& iter = mHandles.begin();

我不应该明确地使用该类型吗?

【问题讨论】:

请出示 MCVE。 ***.com/help/mcve @songyuanyao mHandles是私人的,我觉得他应该试试typename vector&lt;Handle&gt;::iterator @Danh 是的,我认为你是对的。 【参考方案1】:

vector&lt;Handle&gt;::iterator 是一个从属名称,因此当您在模板函数/类中使用它时,您必须在其前面包含一个 typename

简单的改变

vector<Handle>::iterator iter = mHandles.begin();

typename vector<Handle>::iterator iter = mHandles.begin();

会起作用的。

【讨论】:

以上是关于C++ vector<T> 其中 T 是类中的结构的主要内容,如果未能解决你的问题,请参考以下文章

c++中vector<vector<T>>怎么初始化vector<T>?

c++不要用&返回一个变量的地址

在现代 C++ 中将 std::array<std::array<T,N>> 转换为 std::vector<T>

c++中vector<T>中的内存管理

从 Swift 调用 C++ - std::vector<T> 的等价物

在 swig 上包装返回向量<T>