gpt4 book ai didi

c++ - 模板参数错误,C++

转载 作者:行者123 更新时间:2023-11-30 04:36:00 25 4
gpt4 key购买 nike

我使用了一个相当复杂的数据结构:

第 1 类:

template <class T>
class Number
{
private:
T first;
T second;

};

第 2 类:

template <typename Item>
struct TList
{
typedef std::vector <Item> Type;
};

template <typename Item>
class GList
{
private:
typename TList <Item>::Type items;

public:
GList() : items (0) {}


public:
Item & operator [] (int index ) {return items[index];}
};

第 3 类:

template <typename T, template <typename> class GList>
class sortIndices
{

private:
const GList <T> *l;

public:
sortIndices ( const GList <T> *l_ ) : l ( l_ ) {}

bool operator() ( const unsigned int &i_p1, const unsigned int &i_p2 ) const
{
return true;
}

};

第 4 类:

template <typename T, template <typename> class List>
struct TISet
{
typedef std::set <unsigned int, sortIndices <T, List> > Type;
};


template <typename T, template <typename> class List>
struct TSample
{
T res;
typename TISet <T, List> ::Type indices;
TSample ( const List <T> *nl ) : res(0), indices ( nl ) {}
};

第 5 类:

template <typename T, template <typename> class List>
struct TResults
{
typedef std::set < TSample <T, List>, sortIndices <T, List> > Type;
};

第 6 类:

class Test
{
public:
template <typename T, template <typename> class List>
static void function (List <T> *l, typename TResults <T, List> ::Type *result) {}
};

使用以下对象作为静态函数的参数存在问题...

TResults <double, GList >::Type t_results; 

我的第一个问题:如何正确传递结构体 TResults 的地址?

主程序:

int main() 
{
GList <Number <double> *> plist; //Create list of numbers
TResults <double, GList >::Type t_results; //Create empty results

Test::function(&plist, &t_results); //ERROR, test function
}

错误代码:

Error   1 error C2664: 'void Test::function< Number <T> *, GList>( GList <Item> *,std::set<_Kty, _Pr> *)' :
cannot convert parameter 2 from 'std::set<_Kty,_Pr> *' to 'std::set<_Kty,_Pr> *'

with
[
T=double,
Item=Number<double> *,
_Kty=TSample<Number<double> *,GList>,
_Pr=sortIndices<Number<double> *,GList>
]
and
[
_Kty=TSample<double,GList>,
_Pr=sortIndices<double,GList>
]
and
[
_Kty=TSample<Number<double> *,GList>,
_Pr=sortIndices<Number<double> *,GList>
]

修改后

class Test
{
public:
template <typename T, template <typename> class List>
static void function (typename TResults <T, List> ::Type *result) {}
};

int main()
{
GList <Number <double> *> plist; //Create list of numbers
TResults <double, GList >::Type t_results; //Create empty results

Test::function(&t_results); //ERROR, test function
}

出现以下错误:

错误 1 ​​错误 C2783:“void Test::function(TResults::Type *)”:无法推断“T”的模板参数

感谢您的时间和帮助...

最佳答案

没有匹配的特化。你可以打电话

Test::function( GList<Number<double>*>*, TResults<Number<double>*, GList>::Type* );

Test::function( GList<double>*, TResults<double, GList>::Type* );

但是您的参数类型不一致。

关于c++ - 模板参数错误,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4844485/

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