所以我在我的主类中定义了一个函数指针,如下所示:
namespace Lab
{
namespace Math
{
namespace Port
{
void main()
{
typedef void(*objfunptr)(int, int, const double[], double[], double[], int);
objfunptr objfun= ObjectiveFunctions::ExampleObjFun;
// Till Here it compiles fine but after calling the function we have error
objfun(m, n, xPtr, fPtr, fjacPtr, td);
}
}
}
}
我收到以下错误:
Error 16 error LNK2001: unresolved external symbol "public: static void __cdecl Lab::Math::Port::ObjectiveFunctions::ExampleObjFun ...
我的ObjectiveFunctions源和标头定义如下:
部首:
namespace Lab
{
namespace Math
{
namespace Port
{
public class ObjectiveFunctions
{
public:
static void ObjectiveFunctions::ExampleObjFun(int m, int n, const double x[], double f[], double fjac[], int fjacp);
};
}
}
}
来源:
namespace Lab
{
namespace Math
{
namespace Port
{
static void ExampleObjFun(int m, int n, const double x[], double f[], double fjac[], int fjacp){
//Do whatever;
}
}
}
}
请注意,如果我在同一个文件中编写函数,那么这一切都有效,但是当我添加命名空间并将Objectivefunctions分离到另一个类时我得到了这个Peoblem。
我在互联网上看了很多,他们说你必须声明并定义函数,因为编译器不会发疯。但我确实声明并定义了!我不知道会出现什么问题。
答案 0 :(得分:2)
你的线条混乱了:
包含类名的完整功能名称需要放在源文件中:
namespace Lab
{
namespace Math
{
namespace Port
{
// V V V
static void ObjectiveFunctions::ExampleObjFun(int m, int n, const double x[], double f[], double fjac[], int fjacp){
//Do whatever;
}
}
}
}