gpt4 book ai didi

c++ 没有匹配函数来调用 : passing iterators?

转载 作者:行者123 更新时间:2023-11-30 02:59:12 24 4
gpt4 key购买 nike

我在我的 C++ 代码中遇到了一个奇怪的问题。我定义了一个名为

的 TemplateClass
StateTemplate<T>

另外我定义了

typedef StateTemplate<double> StateDouble.

然后我定义了一个友元函数

template<class S>
friend S partialEntangledScalarProduct(
const typename std::vector<StateTemplate<T> >::const_iterator s1,
const typename std::vector<StateTemplate<T> >::const_iterator s2,
const typename std::vector<StateTemplate<T> >::const_iterator sSub1,
const typename std::vector<StateTemplate<T> >::const_iterator sSub2,
vector<unsigned int> const &pos,
vector<unsigned int> const &posNot);

如果我现在做

std::vector<StateDouble>::const_iterator s1;
std::vector<StateDouble>::const_iterator s2;
std::vector<StateDouble>::const_iterator sSub1;
std::vector<StateDouble>::const_iterator sSub2;

vector<unsigned int> vui;

Doub test=partialEntangledScalarProduct(s1,s2,sSub1,sSub2,vui,vui);

我收到以下错误:

no matching function for call to 
'partialEntangledScalarProduct(
__gnu_cxx::__normal_iterator<
const StateTemplate<double>*,
std::vector<
StateTemplate<double>,
std::allocator<StateTemplate<double> > > >&,
__gnu_cxx::__normal_iterator<
const StateTemplate<double>*,
std::vector<
StateTemplate<double>,
std::allocator<StateTemplate<double> > > >&,
__gnu_cxx::__normal_iterator<
const StateTemplate<double>*,
std::vector<
StateTemplate<double>,
std::allocator<StateTemplate<double> > > >&,
__gnu_cxx::__normal_iterator<
const StateTemplate<double>*,
std::vector<
StateTemplate<double>,
std::allocator<StateTemplate<double> > > >&,
const std::vector<unsigned int, std::allocator<unsigned int> >&,
std::vector<unsigned int, std::allocator<unsigned int> >&)'

我已经尝试了几个小时来找出问题所在,但似乎我忽略了什么。也许有人可以帮助我?

最好的问候多米尼克

p.s.:如果您需要有关我的代码的更多信息,请告诉我。目前我只想给你重要的部分。

这是一个有同样错误的小例子。

#include <iostream>
#include <vector>

template<class T>
class StateTemplate{
template<class S>
friend S testFunction(
const typename std::vector<StateTemplate<S> >::const_iterator s1);
public:
StateTemplate();
};

template<class T>
StateTemplate<T>::StateTemplate(){}

template<class T>
T testFunction(
const typename std::vector<StateTemplate<T> >::const_iterator s1)
{
return T(1);
}

int main(){
std::vector<double>::const_iterator s1;
double s=testFunction<double>(s1);
return 0;
}

最佳答案

如果您正确地提供了 partialEntangledScalarProduct 的声明,则函数参数列表中的任何地方都不会使用模板参数 S。因此,编译器永远不会推断出它,您必须显式提供它。

partialEntangledScalarProduct<SomeClass>(s1,s2,sSub1,sSub2,vui,vui);

SomeClass 只是一个示例,具体名称不清楚,除非您提供更多详细信息。

关于c++ 没有匹配函数来调用 : passing iterators?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13088650/

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