我有以下四个文件,
//struct.h
#pragma once
namespace coffee {
class MD2 {};
class Recorder{};
class Book{};
}
//setup.h
#pragma once
#include "struct.h"
using namespace coffee;
void wire(MD2 md2, Book book){}
//strategy.h
#pragma once
#include "struct.h"
#include "setup.h"
namespace strategy {
using namespace coffee;
int wire(MD2 md2, Recorder recorder) {}
int setup2(MD2 md2, Recorder recorder, Book book) {
wire(md2, recorder);
wire(md2, book); //<--compiler cant find this
}
}
//main.cpp
#include <iostream>
#include "strategy.h"
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
我的问题是在
using namespace coffee
之前,程序编译得很好,但是在添加namespace coffee
之后,编译器找不到wire(md2, book)
。
我可以知道为什么吗?
正如 Joel 在您的帖子的评论中指出的那样,您不应该 在 C++ 标头中使用命名空间。
为了避免任何可能与您合作或使用您的代码的开发人员感到头疼,我也会避免同时使用
using namespace
,就像对于任何更大的代码库一样。
即使对于你的小代码示例,我也必须看两遍才能看到
Recorder
是 coffee
的一部分。简单地写出 coffee::Recorder
等,可以使代码更具可读性,并避免日后出现烦人的错误。