gpt4 book ai didi

c++ - vector 模板冲突声明

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

我正在尝试实现一个允许我进行这样的调用的函数

    // vec5 is a vector of tuples in my case
// some code that to declare and fill vec5
columnViewOfTuple<0>(vec5);

我实现了如下功能

template<int N>
struct myfunction {
template<typename T, typename R>
std::vector<R> operator() (T& container)
{
std::vector<R> myvector;
for(typename T::iterator it = container.begin(); it!=container.end(); it++)
myvector.push_back((R)(*it).template get<N>());
return myvector;
}
};

每当我调用 myfunction<0>(vec5) 时,其中 vec5 是一些元组 vector ,它说

main.cpp: In function 'int main()': main.cpp:156: error: conflicting declaration 'myfunction<0> vec5' main.cpp:155: error: 'vec5' has a previous declaration as 'main()::vec1_t vec5'

你们知道如何解决这个问题吗?

谢谢

最佳答案

myfunction<0>(vec5);实际上是 myfunction<0> vec5; .它声明一个对象,并且不创建一个临时对象。您需要消除该语句的歧义,使其成为表达式语句

(myfunction<0>(vec5));

但是最终你想做的是

myfunction<0>()(vec5);

因为你写的是打算创建一个临时的传递 vec5作为构造函数参数。您实际上需要的是通过默认构造函数创建一个对象,然后像上面那样调用函数调用运算符。

关于c++ - vector 模板冲突声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3843582/

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