C++ C++;模板-需要主表达式
在cygwin环境下使用GCC/G++编译器编译以下程序时出错- /src/Template_1.cpp:66:2:错误:应在“Template”之前使用主表达式 TemplateTemplateCall::TemplateCall; ^ 我的源代码如下:-C++ C++;模板-需要主表达式,c++,c++11,templates,C++,C++11,Templates,在cygwin环境下使用GCC/G++编译器编译以下程序时出错- /src/Template_1.cpp:66:2:错误:应在“Template”之前使用主表达式 TemplateTemplateCall::TemplateCall; ^ 我的源代码如下:- #include<iostream> #include<cstdarg> using namespace std; template<class T> class TemplateCall {
#include<iostream>
#include<cstdarg>
using namespace std;
template<class T>
class TemplateCall
{
private:
T dataValue;
public:
TemplateCall(T somethingValue);
void showTTParam();
};
template<class T>
TemplateCall<T>::TemplateCall(T somethingValue)
{
cout << endl << " Calling TemplateCall - constructor " << endl;
dataValue = somethingValue;
}
template<class T>
void TemplateCall<T>::showTTParam()
{
cout << endl << " TemplateTemplateParam - showTTParam " << endl;
cout << endl << " dataValue - showTTParam " << dataValue << endl;
}
int main()
{
template TemplateCall<int>;
return 0;
}
#包括
#包括
使用名称空间std;
模板
类模板调用
{
私人:
T数据值;
公众:
TemplateCall(T somethingValue);
void showTTParam();
};
模板
TemplateCall::TemplateCall(T somethingValue)
{
cout要创建TemplateCall
的实例,您需要使用:
TemplateCall<int> obj;
templatecallobj;
更新,回应OP的评论
要显式实例化类模板,请使用
template class TemplateCall<int>;
模板类TemplateCall;
但是您需要在所有函数之外使用它。要创建TemplateCall的实例,您需要使用:
TemplateCall<int> obj;
templatecallobj;
更新,回应OP的评论
要显式实例化类模板,请使用
template class TemplateCall<int>;
模板类TemplateCall;
但是你需要在所有函数之外使用它。你想用模板TemplateCall;
做什么?你想用模板TemplateCall;
做什么?实际上我需要用“显式实例化”进行测试。您能解释一下,如果在函数外部定义,它工作,而在函数中使用时不工作的原因吗。来源:-显式实例化模板类名<参数列表>;(1)外部模板类名<参数列表>;(2)(自C++11)1)显式实例化定义2)显式实例化声明显式实例化定义强制实例化它们引用的类、结构或联合。它可能出现在程序中模板定义之后的任何位置,并且对于给定的参数列表,在整个程序中只允许出现一次。关于,Nandu Mishra@NANDUMISHRA来自C++11标准(14.7.2/3):如果显式实例化中声明的名称是非限定名称,则显式实例化应出现在声明其模板的命名空间中,或者,如果该命名空间是内联的(7.3.1),则出现在其封闭命名空间集中的任何命名空间中“显式实例化”。请您解释一下,如果在函数外部定义,它会工作,而在函数中使用时不工作的原因。来源:-显式实例化模板类名<参数列表>;(1)外部模板类名<参数列表>;(2)(自C++11)1)显式实例化定义2)显式实例化声明显式实例化定义强制实例化它们引用的类、结构或联合。它可能出现在程序中模板定义之后的任何位置,并且对于给定的参数列表,在整个程序中只允许出现一次。关于,Nandu Mishra@NANDUMISHRA根据C++11标准(14.7.2/3):如果显式实例化中声明的名称是非限定名称,则显式实例化应出现在声明其模板的名称空间中,或者,如果该名称空间是内联的(7.3.1),则其封闭名称空间集中的任何名称空间中。