我想使用某个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
MyHeader::SomeFunction(0);
这一切都很好,但链接器报告未解析的外部。显然它没有看到名称空间和功能。我该如何解决这个问题?
作为一个额外的问题 - 如果我以多种形式使用这样的函数集,它应该只编译一次并重复使用(我猜不会有几个相同函数的副本?)
答案 0 :(得分:2)
实际函数在cpp文件中定义,它不会实现头文件中声明的接口。
实施
namespace MyHeader
{
void SomeFunction(int Param) { /* Your implementation goes here. */ }
}
在cpp文件中。
答案 1 :(得分:2)
您可能忘记将函数定义放在命名空间中。
它或者像在头文件中那样完成,但是使用函数体:
namespace MyHeader
{
void SomeFunction(int Param)
{
// ...
}
}
或使用范围运算符::
:
void MyHeader::SomeFunction(int Param)
{
// ...
}