隐藏的成员函数实现(如静态全局函数)

时间:2016-07-06 17:04:05

标签: c++ c++11 linker

假设您有两个具有相同内容的实现源文件:

// foo{a,b}.cpp
class Foo {
public:
  void bar();
}
void Foo::bar() { std::cout << "bar\n"; }

实现普通函数(不是成员方法),我只想将此方法标记为static。但是这在方法声明上有不同的含义,不能在实现中指定。

如何更改foob.cpp以便在编译和链接文件时不会出现链接器错误?

2 个答案:

答案 0 :(得分:4)

您可以将整体放在未命名的命名空间

// foo{a,b}.cpp
namespace
{

    class Foo {
    public:
      void bar();
    }
    void Foo::bar() { std::cout << "bar\n"; }
}

该课程在外面不可见,只能在当前的翻译单元中使用。

答案 1 :(得分:0)

正常的解决方案是从Foo::bar()删除foob.cpp的定义。