我想使用特定的 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)
{
// ...
}
关于c++ - 在多个 VCL 模块中使用命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19587235/