我有以下的主程序,它在編譯時給出了這樣的錯誤:雙開方機(雙,SineFunctor &) 爲什麼不能鏈接器找到函數平方 未定義的符號?C++編譯算符錯誤
include <iostream>
#include "SineFunctor.h"
#include "squarer.h"
int main()
{
const double PI = 3.141592L;
double x = 1.0;
double y;
// initialize function parameters
SineFunctor sine(2., 10.*PI, 0.);
// pass functions sine to function squarer
y = squarer(x, sine);
return 0;
}
這裏是SineFunctor
// SineFunctor.h
#ifndef __functor_example__SineFunctor__
#define __functor_example__SineFunctor__
#include <iostream>
class SineFunctor {
public:
// constructor to set function parameters
SineFunctor(const double amp, const double freq, const double phase);
// function evaluation using overloaded operator()
double operator() (const double t);
private:
double _amp;
double _freq;
double _phase;
};
#endif /* defined(__functor_example__SineFunctor__) */
// SineFunctor.cpp
#include <cmath>
#include "SineFunctor.h"
// constructor to set function parameters
SineFunctor::SineFunctor(const double amp, const double freq, const double phase) {
_amp = amp;
_freq = freq;
_phase = phase;
}
// function evaluation using overloaded operator()
double SineFunctor::operator() (const double t) {
return _amp * sin(_freq * t + _phase);
}
文件和平方>
// squarer.h
#ifndef __functor_example__squarer__
#define __functor_example__squarer__
#include <iostream>
template <class F>
double squarer(const double x, F& func);
#endif /* defined(__functor_example__squarer__) */
// squarer.cpp
#include "squarer.h"
template <class F>
double squarer(const double x, F& func) {
double y = func(x);
return y * y;
}
可能的重複[爲什麼模板只能在頭文件中實現?](http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-文件) – 2013-05-01 22:24:00