在名称空间

时间:2016-04-20 08:25:19

标签: c++ managed-c++

所以我在我的主类中定义了一个函数指针,如下所示:

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。

我在互联网上看了很多,他们说你必须声明并定义函数,因为编译器不会发疯。但我确实声明并定义了!我不知道会出现什么问题。

1 个答案:

答案 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;
          }
        }
    }
}