C++ 奇怪的标题c++;

C++ 奇怪的标题c++;,c++,C++,在A.h上,我不必#包含任何内容或使用名称空间 在另一个标题上,B.h我必须包括vector和使用名称空间std。这两个标题都没有链接。似乎是文件问题。当我将A.h的内容(没有任何问题)复制到B.h时,我仍然会收到一个编译器错误,说string不是类型名,vector不是模板,尽管编译器在A.h打开相同内容时没有声明任何内容。我在VisualStudio上编写C++代码。发生了什么?头几行中应该有\include和\include。然后,当您在程序或头文件中引用这些类型时,我建议您引用std::

A.h
上,我不必
#包含任何内容或使用名称空间


在另一个标题上,
B.h
我必须包括
vector
使用名称空间std
。这两个标题都没有链接。似乎是文件问题。当我将
A.h
的内容(没有任何问题)复制到
B.h
时,我仍然会收到一个编译器错误,说
string
不是类型名,
vector
不是模板,尽管编译器在
A.h
打开相同内容时没有声明任何内容。我在VisualStudio上编写C++代码。发生了什么?

头几行中应该有
\include
\include
。然后,当您在程序或头文件中引用这些类型时,我建议您引用
std::string
std::vector
。正如@NathanOliver所指出的那样,使用像这样的限定引用是
使用命名空间std
的首选替代方法。

请用or来回答您的问题。另外,请不要使用
名称空间std。进一步阅读:在没有看到编译器试图编译的代码的情况下,我们如何告诉您问题可能是什么?@user859385 compiler不会给您带来问题。您的程序(可能)格式不正确,编译器会告诉您它有什么问题。如果你不明白编译器说的话,那么你可以给我们看一个,我们可以给你解释。头文件通常不会被编译。它们总是包含(即扩展)在编译单元中。这些编译单元可能会更改头文件的环境。这只是一个想法,但是否可能存在始终包含在A.h之前而不是B.h之前的包含文件。通常,您应该始终在头文件中包含(或声明)您需要的内容,因此实际上B.h是没有任何问题的。IMHO,头文件应仅包含
#头文件以解析头文件中的符号。使用源文件中的
#include
解析源文件中的符号。@ThomasMatthews我同意。我认为我的回答假设了上下文,即所讨论的头文件确实声明了top
string
vector
的对象。