gpt4 book ai didi

c++ - 在我自己的类上使用 std::inner_product

转载 作者:行者123 更新时间:2023-11-30 01:25:03 28 4
gpt4 key购买 nike

我想出了我自己的小类,叫做 TinyVector。现在我正在尝试在其上使用 std::inner_product。但我无法让它工作,我不明白为什么这不起作用。我正在使用 Visual Studio 2012。

#include <iostream>
#include <vector>
#include <numeric>

using namespace std;

template<class T, int N>
class TinyVector {
public:
TinyVector() { data = vector<T>(N, 0); }
explicit TinyVector(const T initVal) { data = vector<T>(N, initVal); }
~TinyVector() { data.clear(); }
inline T& operator[](int i) { return data[i]; }
inline T operator[](int i) const { return data[i]; }
inline vector<T>::const_iterator begin() const { return data.begin(); } //Line 15
inline vector<T>::const_iterator end() const { return data.end(); } //Line 16
private:
vector<T> data;
};

template<class T, int N>
inline double dot(const TinyVector<T,N>& A, const TinyVector<T,N>& B)
{
return inner_product(A.begin(), A.end(), B.begin(), 0.0);
}

int main()
{
TinyVector<double, 10> Ty;
for (int i = 0; i < 10; ++i)
Ty[i] = i;

cout << dot(Ty,Ty) << endl;
}

编译器告诉我:语法错误:缺少“;”在第 15 行的标识符“开始”之前。缺少类型说明符 - 假定为 int。注意:C++ 不支持第 15 行的 default-int。语法错误:缺少“;”在第 16 行的标识符“end”之前。缺少类型说明符 - 假定为 int。注意:C++ 不支持第 16 行的 default-int。

但是改变vector<T>::const_iterator进入vector::const_iterator似乎不是要走的路。也将其更改为“自动”不起作用。这给了我“预期的尾随返回类型”。如果我删除第 15,16 和 17 行并将 A.begin() 替换为 A.data.begin() 和接下来的两个参数,那么一切都很好。但为什么我的原始代码不起作用,我怎样才能让它起作用?

最佳答案

你需要写

inline typename vector<T>::const_iterator begin() const { return data.begin(); } //Line 15
^^^^^^^^

这是因为 vector<T>::const_iterator是一个依赖名称(它依赖于类型参数 T )因此需要告诉编译器 vector<T>::const_iterator是一种类型(而不是,比如说,enum 值或静态数据成员)。

关于c++ - 在我自己的类上使用 std::inner_product,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12974007/

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