C++ 如何解决 headers 中的命名空间未定义的问题?

C++ How do you solve namespaces in headers becoming undefined?

所以我目前正在为我正在进行的一个更大的项目制作一个小原型,我已经完全陷入困境。我是 c++ 的新手,以前从未使用过 headers 或名称空间。问题是,当我尝试使用我创建的命名空间时,它完全失败并且编译器 (clang) returns 未定义。

#include <iostream>
#include "bark.hpp"

using namespace bark;

int main() {
    bark::woof();
}

Header 文件:

#pragma once
#ifndef FUNCTIONS_HPP
#define FUNCTIONS_HPP

namespace bark {
    void woof();
}

#endif

具有函数的文件:

#include <iostream>
#include "bark.hpp"

void woof() {
    std::cout << std::endl << "woof" << std::endl;
}

在实现文件中,这样定义:

void woof() 
{
 // ...
}

在全局命名空间中定义了一个函数woof。因此,当您拨打电话时:

bark::woof();

main函数中,没有bark::woof定义,linker会拒绝link程序。


要正确定义命名空间 bark 中的 woof,您需要对其进行限定:

void bark::woof() 
{
 // ...
}

或者引入命名空间bark,在里面定义:

namespace bark
{
  void woof() 
  {
    // ...
  } 
}