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()
{
// ...
}
}
所以我目前正在为我正在进行的一个更大的项目制作一个小原型,我已经完全陷入困境。我是 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()
{
// ...
}
}