C++ 在名称空间中调用函数指针
我在我的主类中定义了一个函数指针,如下所示:C++ 在名称空间中调用函数指针,c++,managed-c++,C++,Managed C++,我在我的主类中定义了一个函数指针,如下所示: namespace Lab { namespace Math { namespace Port { void main() { typedef void(*objfunptr)(int, int, const double[], double[], double[], int); objfunptr objfun= Object
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 ...
My ObjectiveFunctions源和头的定义如下:
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);
}
}
}
}
标题:
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分离到另一个类中时,我得到了这个问题
我在网上看过很多,他们说你必须声明和定义函数,这样编译器就不会发疯了。但我确实声明并定义了!我不知道会有什么问题。你的台词搞错了: 包括类名在内的完整函数名需要放在源文件中:
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;
}
}
}
}
你把台词弄混了: 包括类名在内的完整函数名需要放在源文件中:
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;
}
}
}
}
那不行@nvoigt。因为在这种情况下,我必须摆脱静态,我不想这样做。@Afshinzkh nvoigt是说您在定义中遗漏了类范围。这就是链接器找不到它的原因。你不必去掉静态限定符,现在我知道了。谢谢那不行@nvoigt。因为在这种情况下,我必须摆脱静态,我不想这样做。@Afshinzkh nvoigt是说您在定义中遗漏了类范围。这就是链接器找不到它的原因。你不必去掉静态限定符,现在我知道了。谢谢