我想使用某个namespace及其功能,以几种形式使用它来具有某种共享功能。但是,我有链接器问题。

这是我做的-创建了一个新的单元,并在其中写入了头文件:



#ifndef MyHeaderH
#define MyHeaderH

namespace MyHeader
    {
    enum { SOMETHING1, SOMETHING2 };
    void SomeFunction(int Param);
    }

#endif


当然,实际的功能是在cpp文件中定义的,以上只是来自h文件。

而cpp文件如下:

#pragma hdrstop
#include "MyHeader.h"
#pragma package(smart_init)

void SomeFunction(int Param)
{
//some code here
}


所以在我的主要形式Form1中,我将上述内容包含在Form1的hpp文件中

MyHeader::SomeFunction(0);


所有这些都可以正常编译,但是链接器报告外部未解析。因此很明显,它看不到名称空间和功能。我该如何解决?

另一个问题-如果我以多种形式使用这种功能集,则应将其全部编译一次并正确使用(我猜它不会有多个相同功能的副本吗?)

最佳答案

您可能忘记了将函数定义放在名称空间中。

可以像在头文件中一样完成此操作,但是具有一个函数主体:

namespace MyHeader
{
    void SomeFunction(int Param)
    {
        // ...
    }
}


或使用范围运算符::

void MyHeader::SomeFunction(int Param)
{
    // ...
}

09-25 20:43