C ++:未定义的函数引用 - 如果包含头文件则失败,如果包含源代码则有效

时间:2014-01-06 04:16:02

标签: header

我无法使用包含的标题惯例来使这段代码工作。

help.cpp

#include <iostream>
#include "basicMath.h"



using namespace std;

int main() {

        int arr[4]={0,1,2,3};
        int k=0;
        int m=3;
        //permutations call
        perm(arr,k,m);
        return 0;
}

BasicMath.h

    #ifndef BASICMATH_H_
    #define BASICMATH_H_


    template<class T>
    void Swap ( T& a, T& b );

    template<class T1>
    void perm ( T1 arr[], int k, int m);

    #endif /* BASICMATH_H_ */

BasicMath.cpp

#include <iostream>
#include "basicMath.h"

using namespace std;

template<class T>
void Swap ( T& a, T& b )
{
       T temp;
       b=temp;
       b=a;
       a=temp;
}

template<class T1>
void perm ( T1 arr[], int k, int m)
{
     //base case
     cout << "Call: " << arr[0] << arr[1] << arr[2] << arr[3] << "\t" << k << "\t" << m << "\n";
     if (k==m) {
               for (int i=0;i<=m;i++) {
                   cout << arr[i];
               }
               cout << endl;
     } else {
          for (int i=k;i<=m;i++) {
                  swap(arr[k],arr[i]);
                  perm(arr,k+1,m);
                  swap(arr[k],arr[i]);
              }
     }
}

如果我用#include“basicMath.cpp”替换#include“basicMath.h”然后程序工作。 请帮忙。使用headers和src的Eclipse Project新手。 感谢Adv。

1 个答案:

答案 0 :(得分:0)

“简单”的答案是你不能将模板函数的实现放入.cpp文件中。

请参阅http://www.parashift.com/c++-faq/templates-defn-vs-decl.html