在C++Builder中,模板类型的引用不能作为函数参数吗?

时间:2020-12-14 03:39:13

//list.h
template <typename T>
class cirList
{
public:

    int insertEle(const T& item, int idx);

};



//list.cpp
export template <typename T>
int cirList<T>::insertEle(const T& item, int idx)
{
    //do something
}


报错:E2316 'cirList<T>::insertEle(ListNode<T> &,int)' is not a member of 'cirList<T>'

只要把&去掉了,编译就不会报错;同样的代码,只要去掉export,在VS2010中也能正确编译,这是不是BCB不支持将模板类型的引用作为参数传递呢?

9 个解决方案

#1


>::insertEle(ListNode<T> &,int)' is not a member of 'cirList<T>'
为什么是ListNode<T>?哪里来的?

#2


引用 1 楼 wewaa 的回复:
>::insertEle(ListNode<T> &,int)' is not a member of 'cirList<T>'
为什么是ListNode<T>?哪里来的?


不好意思发错了,提示信息是:
E2316 'cirList<T>::insertEle(const T &,int)' is not a member of 'cirList<T>'

#3


CB肯定是可以将模板的引用或指针作为函数参数的

#4


引用 3 楼 dataxdata 的回复:
CB肯定是可以将模板的引用或指针作为函数参数的


但是报错了啊.....很奇怪.....

#5


最好把实际的代码部分发上来看看

#6


模板错误经常怪怪的,往往不是在出错的地方进行提示,只是跟出错的内容相关。

#7


把 list.cpp 的内容,放到list.h中,试试看,模板的声明和定义都放在.h头文件中

#8


export 这个特性没哪个编译器支持吧。
模板的所有实现要放在一起,不要分开。

#9


问题应该还是出在声明和实现没有放在一块上,本来看了篇文章,提到用export可以将模板的声明和实现分开放置,但看来还是得放一块儿

#1


>::insertEle(ListNode<T> &,int)' is not a member of 'cirList<T>'
为什么是ListNode<T>?哪里来的?

#2


引用 1 楼 wewaa 的回复:
>::insertEle(ListNode<T> &,int)' is not a member of 'cirList<T>'
为什么是ListNode<T>?哪里来的?


不好意思发错了,提示信息是:
E2316 'cirList<T>::insertEle(const T &,int)' is not a member of 'cirList<T>'

#3


CB肯定是可以将模板的引用或指针作为函数参数的

#4


引用 3 楼 dataxdata 的回复:
CB肯定是可以将模板的引用或指针作为函数参数的


但是报错了啊.....很奇怪.....

#5


最好把实际的代码部分发上来看看

#6


模板错误经常怪怪的,往往不是在出错的地方进行提示,只是跟出错的内容相关。

#7


把 list.cpp 的内容,放到list.h中,试试看,模板的声明和定义都放在.h头文件中

#8


export 这个特性没哪个编译器支持吧。
模板的所有实现要放在一起,不要分开。

#9


问题应该还是出在声明和实现没有放在一块上,本来看了篇文章,提到用export可以将模板的声明和实现分开放置,但看来还是得放一块儿