我有以下代码:
文件main.cpp:
loess.control(surface = "direct")
文件A-inl.h
#include <iostream>
#include "A.h"
class X{};
int
main()
{
X x;
A<X> a(x);
}
档案A.h
#include <iostream>
template <class T1>
A<T1>::A(T1 t)
{
}
template <class T1>
void A<T1>::foo(T1 t1)
{
}
template <class T1, class T2>
void A<T1>::bar(T1 t, T2 t2) // Compilation Problem
{
}
g ++ -g main.cpp
template <class T1>
class A
{
public:
explicit A(T1 t1);
void foo(T1 t1);
template <class T2>
void bar(T1 t1, T2 t2); // Compilation Problem
};
#include "A-inl.h"
请告诉我如何申报吧? 还有一个问题是,我是否可以创建一个对象A a;我不知道T2的类型吧?如何生成条形码。
由于
答案 0 :(得分:0)
你的标题声明没问题;但请尝试在函数定义的内联文件中执行此操作。
template<class T1>
template<class T2>
void A<T1>::bar( T1 t, T2 t2 ) {
}
现在解决,编译和构建;至少在Visual Studio 2015社区中它确实如此。
这不起作用:
template<class T1, class T2>
void A<T1>::bar( T1 t, T2 t2 ) {
}
因为您的标题声明与您的内联函数定义不匹配,所以您在类模板中声明模板函数的方式如下:
template<class T2>
void bar( T1 t, T2 t2 );
这就是为什么你需要声明类模板所需的template<class T1>
,然后你需要为模板函数声明template<class T2>
,因为你在类模板中声明了它。 / p>