c++ - 在多个 VCL 模块中使用命名空间

标签 c++ linker namespaces c++builder

我想使用特定的 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 中,我将以上内容包含在 Form1hpp 文件中

MyHeader::SomeFunction(0);

这一切编译正常,但链接器报告未解析的外部。所以很明显它看不到命名空间和函数。我该如何解决?

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

最佳答案

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

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

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

或者使用作用域运算符:::

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

关于c++ - 在多个 VCL 模块中使用命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19587235/

相关文章:

c++ - 数组结构需要无参数构造函数

c++ - QML 中的着色器插件安装

c++ - 是否有一些方法可以使 c++ 类中的一个函数在不同的线程中运行

c++ - 如何在 C++ 中强制包含静态库中的静态对象 (MSVC 11)

c++ - operator new inside 命名空间

c++ - 在 C++14 中使用 auto 作为返回和参数类型

c++ - CMake 链接器无法正常工作

c - 在嵌入式系统中存储/验证校验和

C# 是否可以在我的 dot net 网站中为代码隐藏和类创建一个可访问的命名空间

spring - 在 Spring 中嵌套自定义标签