gpt4 book ai didi

c++ - 嵌套模板 : "expected primary-expression before ' )'"

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:43:13 35 4
gpt4 key购买 nike

我正在用 C++ 编写一个 Point 类并为此使用模板。但是我有一个我不明白的编译错误。我写了一个问题的最小示例:

#include <array>
#include <vector>
#include <iostream>
template <typename T, int DIM>
class Point
{
private:
std::array<T, DIM> values;

public:
template <int ROW>
T get()
{
return values.at(ROW);
};
};

template <typename T>
class Field
{
public:
T print(std::vector<Point<T, 3> >& vec)
{
for (auto it : vec)
{
T bla = it.get<1>(); // the error line 27
}
};
};

int main(int argc,
char* argv[])
{
Point<double, 3> p;
double val = p.get<1>();
std::cout << val << std::endl;

Field<int> f;
std::vector<Point<int, 3> > vec;
f.print(vec);

return 0;
}

我用

编译
g++ main2.cpp -std=c++11

输出是

main2.cpp: In member function ‘T Field<T>::print(std::vector<Point<T, 3> >&)’:
main2.cpp:27:33: error: expected primary-expression before ‘)’ token
T bla = it.get< 1 >();
^
main2.cpp: In instantiation of ‘T Field<T>::print(std::vector<Point<T, 3> >&) [with T = int]’:
main2.cpp:41:16: required from here
main2.cpp:27:27: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator<’
T bla = it.get< 1 >();

有人知道为什么会出现这个错误以及如何解决吗?

谢谢。

最佳答案

it.get<1>()依赖于模板参数,您需要告诉编译器 get是一个模板,以便可以正确解析它:

T bla = it.template get<1>();

此外,您不会从 print 返回任何内容函数,即使声明说它应该返回一个 T .

参见 this有关 template 的更多详细信息的问题此上下文中的关键字。

关于c++ - 嵌套模板 : "expected primary-expression before ' )'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37541971/

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