2013-02-21 91 views
0

我正在编译以下代码,并且收到错误消息。我想练习中提升模板,我不知道如何来处理这个问题致命错误LNK1120:1个未解决的外部问题

#include <stdafx.h> 
#include <iostream> 
#include <string> 
#include <boost/function.hpp> 
#include <boost/array.hpp> 

using namespace std; 
template<typename R,typename D> 
class GenericFunction 
{ 
private: 
    boost::function<R (D)> f; 
protected: 
    GenericFunction(); 
public: 
    GenericFunction(const boost::function<R (D)>& myFunction); 
    R evaluate(const D& value) const ; 
    R operator()(const D& value) const; 
}; 
template <typename R, typename D, int N> 
class ScalarValuedFunction:public GenericFunction<R,boost::array<D, N>> 
{ 
public: 
    ScalarValuedFunction(const boost::function<R (const boost::array<D, N>)> &myF); 
}; 

template<typename Numeric, std::size_t N> 
Numeric Norm(const boost::array<Numeric , N>& Vec) 
{ 
    Numeric Result=Vec[0]*Vec[0]; 
    for (std::size_t i=1; i<Vec.size();i++) 
    { 
     Result+=Vec[i]*Vec[i]; 
    } 
    return Result; 
} 

int main() 
{ 
    const int N=4; 
    boost::array<double, N> arr={0.2,.3,1.1,4}; 
    ScalarValuedFunction<double, double, N> myfun(Norm<double,N>); 
} 

和接收以下错误,

ConsoleApplication2.obj : error LNK2019: unresolved external symbol "public: __thiscall ScalarValuedFunction<double,double,4>::ScalarValuedFunction<double,double,4>(class boost::function<double __cdecl(class boost::array<double,4>)> const &)" ([email protected][email protected]@[email protected][email protected][email protected][email protected]@@@[email protected]@@@Z) referenced in function _main 
1>c:\users\university\documents\visual studio 2012\Projects\ConsoleApplication2\Debug\ConsoleApplication2.exe : fatal error LNK1120: 1 unresolved externals 

请谁能告诉我什么是错我的代码?

+0

您为'ScalarValuedFunction <>'声明了一个构造函数,但没有定义它。当然,一旦你这样做了,你还需要为'GenericFunction <>'定义构造函数。 – ildjarn 2013-02-21 01:57:52

回答

1

您还没有为ScalarValuedFunction类定义构造函数,只声明了它。

2

您没有为您的ScalarValuedFunction类模板的构造函数,这是仍然提供定义在类模板的定义中声明

ScalarValuedFunction(const boost::function<R (const boost::array<D, N>)> &myF); 

链接器因此抱怨说,在调用构造函数不能解决。通话发生在main()

ScalarValuedFunction<double, double, N> myfun(Norm<double,N>); 

解决您的问题,添加一个定义构造函数。例如:

template<typename R, typename D, int N> 
ScalarValuedFunction<R, D, N:::ScalarValuedFunction(
    const boost::function<R (const boost::array<D, N>)> &myF 
    ) 
    : 
    GenericFunction<R, boost::array<D, N>>::GenericFunction(myMF) 
{ } 
+0

谢谢,这解释了很多 – user2085646 2013-02-21 02:08:30

+0

@ user2085646:很高兴帮助 – 2013-02-21 02:09:48

相关问题