gpt4 book ai didi

std::vector 的 C++ 模板包装器类

转载 作者:行者123 更新时间:2023-11-30 00:57:26 24 4
gpt4 key购买 nike

我正在尝试使用模板封装 C++ 标准库的 vector 类,但我一直收到错误

SceneVector.h: In member function ‘void scenegraph::SceneVector<V>::print()’:
SceneVector.h:40: error: expected ‘;’ before ‘it’
SceneVector.h:40: error: ‘it’ was not declared in this scope

我设法创建的代码是

#include <map>
#include <vector>
#include <iostream>

namespace scenegraph
{
template <class V> class SceneVector
{
typedef std::vector<V> Vector;
Vector vector;

public:
SceneVector();
void insert(const V value);
void print();
};

template <class V> SceneVector<V>::SceneVector()
{
vector.clear();
}

template <class V> void SceneVector<V>::insert(const V value)
{
vector.push_back(value);
}

template <class V> void SceneVector<V>::print()
{
for(Vector::iterator it = vector.begin(); it != vector.end(); ++it)
{
std::cout << "[" << (*it) << "] " << std::endl;
}
std::cout << std::endl;
}
}

有人可以在这里纠正我吗?我必须强调我是 C++ 新手,所以答案可能非常微不足道。

最佳答案

当访问依赖于模板参数的类型时,您必须在前面加上 typename 以向解析器表明该类型是一个类型。

for(typename Vector::iterator it = vector.begin(); it != vector.end(); ++it)

Vector::iterator 有可能是一个编译时常数,编译器直到实例化时才能知道。这就是为什么你必须明确地告诉它。

关于std::vector 的 C++ 模板包装器类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8113568/

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