C++ 如何解决标题中的名称空间变得未定义的问题?

Din*_*gus 2 c++ namespaces header

所以我目前正在为我正在进行的一个更大的项目制作一个小原型,我已经完全陷入困境。我对 C++ 比较陌生,以前从未使用过头文件或命名空间。问题是,当我尝试使用我创建的命名空间时,它完全失败并且编译器(clang)返回未定义。

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

using namespace bark;

int main() {
    bark::woof();
}
Run Code Online (Sandbox Code Playgroud)

头文件:

#pragma once
#ifndef FUNCTIONS_HPP
#define FUNCTIONS_HPP

namespace bark {
    void woof();
}

#endif
Run Code Online (Sandbox Code Playgroud)

带有函数的文件:

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

void woof() {
    std::cout << std::endl << "woof" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

cig*_*ien 6

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

void woof() 
{
 // ...
}
Run Code Online (Sandbox Code Playgroud)

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

bark::woof();
Run Code Online (Sandbox Code Playgroud)

main功能,没有 bark::woof定义,链接器将拒绝该计划联系起来。


要正确定义wooffrom namespace bark,您需要对其进行限定:

void bark::woof() 
{
 // ...
}
Run Code Online (Sandbox Code Playgroud)

或者引入 namespace bark,并在里面定义它:

namespace bark
{
  void woof() 
  {
    // ...
  } 
}
Run Code Online (Sandbox Code Playgroud)