0

我想使用某些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我将上述内容包含在hpp文件中Form1

MyHeader::SomeFunction(0);

这一切都编译得很好,但链接器报告未解决的外部问题。所以很明显它没有看到命名空间和功能。我该如何解决?

作为一个额外的问题 - 如果我以多种形式使用这样的函数集,它应该只编译一次并正确重用(我猜它不会有多个相同函数的副本?)

4

2 回答 2

2

实际函数是在 cpp 文件中定义的,它没有实现在头文件中声明的接口。

实施

namespace MyHeader
{
    void SomeFunction(int Param) { /* Your implementation goes here. */ }
}

在 cpp 文件中。

于 2013-10-25T10:26:20.760 回答
2

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

它要么像你在头文件中那样完成,但有一个函数体:

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

或使用范围运算符::

void MyHeader::SomeFunction(int Param)
{
    // ...
}
于 2013-10-25T10:28:26.950 回答