如何在基类(不是模板类)中调用c++模板函数
how to call c++ template function in base class(not template class)
链接时下面的调用者说未定义引用…
在base.h文件:
class tempc {
public:
int a;
} ;
class base // base class
{
public: // public
template<T> int func(T*); // template defined here
};
base.cpp文件:
template<T>
int base :: func(T*)
{
std::cout << "base::func called" << std::endl;
return 0;
}
在derived.cpp文件
class derived : public: base // class defined
{
void caller()
{
tempc a;
func<tempc>(&a); // template used here
base::func<tempc>(&a);
}
};
int main()
{
derived d;
d.caller();
}
错误是:对' void base::func(temp *)'的未定义引用
base是基类
derived是基类
的派生类。这个调用者说未定义的引用…
//抱歉,因为我的源代码实在太大了,无法显示
代码工作正常(在您纠正了无意义语法之后):
class base
{
public:
template<class T> int func();
// ^^^^^
// use class keyword
}; // <-- semicolon here
template<class T>
// ^^^^^
// use class keyword
int base::func()
{
return 0;
}
class derived : public base
// ^
// no colon here
{
void caller()
{
func<int>(); // it works
base::func<int>(); // this works too
}
}; // <-- semicolon here
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 没有为自己的结构调用列表推回方法
- 调用'begin(int [n])'没有匹配函数
- 什么时候调用析构函数
- 如何用参数值调用函数(仅在运行时已知)
- std::cout.imbue()多重调用
- 函数何时会在c++中包含stack_Unwind_Resume调用