Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板只适用于内联定义_C++_Class_Templates - Fatal编程技术网

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));
};