在头文件中定义/声明模板的正确方法?

时间:2015-03-16 04:26:09

标签: c++ templates compiler-errors

AFAIK,我应该在头文件中声明一个类(及其函数),然后在它的相应.cpp文件中定义它们。

这是我的代码。

  

C1.h

#ifndef C1_H_
#define C1_H_

namespace newspace {

class C1 {
public:
    void print();             //just a Hello World.
    template <typename T1>
    T1 power(T1 x, T1 y);     // calculate x^y
};

}

#endif 
  

C1.cpp

#include "C1.h"
#include<iostream>
namespace newspace {
void C1::print()                           // print() defined
{
    std::cout<<"Hello World"<<std::endl;
}
template <typename T1>
T1 C1::power(T1 x, T1 y)  //calculate x^y      // power() defined
{
    T1 ans=1;
    for (T1 i=0;i<y;i++)  
    {
        ans*=x;
    }
    return ans;
}
}
  

的main.cpp

#include <iostream>
#include "C1.h"
using namespace std;
int main()
{
    newspace::C1 obj1;                 // created object obj1
    obj1.print();                      // works perfectly
    cout<<"Enter two numbers";
    int x,y;
    cin>>x>>y;
    cout<<obj1.power(x,y);             // gives error
    return 0;
}

print()函数正常工作,但模板化函数power()不起作用并提供错误

undefined reference to `int newspace::C1::power<int>(int, int)'

我在这里做错了什么?我该怎么做?

0 个答案:

没有答案