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是说您在定义中遗漏了类范围。这就是链接器找不到它的原因。你不必去掉静态限定符,现在我知道了。谢谢