C++ 模板只适用于内联定义
在内联定义我的模板类时,以下代码可以正常工作:C++ 模板只适用于内联定义,c++,class,templates,C++,Class,Templates,在内联定义我的模板类时,以下代码可以正常工作: main { unsigned int A=0; //local variable in 'main'. Test<int> TestObjekt; //Object. //do something cout<<TestObjekt.calculate_a(A); }; main { 无符号int A=0;//局部变量位于“main”中。 test
main
{
unsigned int A=0; //local variable in 'main'.
Test<int> TestObjekt; //Object.
//do something
cout<<TestObjekt.calculate_a(A);
};
main
{
无符号int A=0;//局部变量位于“main”中。
testtestobjekt;//对象。
//做点什么
cout在生成测试对象的主函数中,向构造函数添加一个值(使用init值生成测试对象):
完整版本:
template <typename T> class Test //class declaration
{
private: T a; //private variable
public:
Test(T InitA= 0); // <<<-- either change here
T calculate_a(T); //method
};
模板类测试//类声明
{
private:ta;//私有变量
公众:
Test(T InitA=0);//行testtestobjekt;
隐式调用默认构造函数Test()
,该构造函数不存在
您需要在main中的构造函数调用中添加参数:testtestobjekt(0);
或者,定义一个不需要值Test(){\\do something}
此外,模板定义必须位于头文件中
请参阅答案,以获得标题中为什么需要定义的详细解释。为什么不遵循工作方式?您定义的构造函数采用了t
。因此,在创建实例时需要提供t
。也需要Test TestObjekt(a);
。您正在显示的代码不是您正在编译的代码,请修正您的问题以使其更准确。@billz:删除是在MyDefinitions.h中,并且在MyDefinitions.cpp中定义,它与主文件分开。但是其他子例程和类在此程序中以相同的方式分开,工作正常。thanks@Balog帕l:你说的“工作方式”是什么意思?:嗨,Nicholaz,不幸的是没有。它不会改变错误消息的任何内容。“错误指针”(我不知道,如果表达式正确的话),指向main中对象的定义,-->Test TestObjekt;感谢您的努力。确实如此。我甚至在这里编译了它,并得到了相同的错误。在TestObjekt中添加“(0)”确实使它消失了(并且它不在您的示例中)不,不应该。他正在对对象进行无参数定义,但该类需要构造函数的参数。
template <typename T> class Test //class declaration
{
private:
T a; //private variable
public:
Test(T InitA); //constructor
T calculate_a(T); //method
};
template <typename T> Test<T>::Test(T InitA)
{
a=InitA;
}
template <typename T> T Test<T>::calculate_a(T) //metodo della classe Test
{
a+=2;
return a;
}
1.error C2512: 'Test<T>': non è disponibile alcun costruttore predefinito...
means: there is no appropriate, predefined constructor available
1> with
1> [
1> T=int
1> ]
Test<int> TestObjekt(0); // Object with init value
Test(T InitA= 0); //constructor with default value
template <typename T> class Test //class declaration
{
private: T a; //private variable
public:
Test(T InitA= 0); // <<<-- either change here
T calculate_a(T); //method
};
void main()
{
unsigned int A=0; //local variable in 'main'.
Test<int> TestObjekt(0); // <<<--- change here.
//do something
printf("%d", TestObjekt.calculate_a(A));
};