我想使用某个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)
{
// ...
}