C++ 错误:';字符串';在命名空间中';std&x27;不命名类型

C++ 错误:';字符串';在命名空间中';std&x27;不命名类型,c++,class,C++,Class,我有两个分开的类,无法修复编译器问题: 在classA.cpp中包含的文件中:2:0: classB.h:6:10:错误:命名空间“std”中的“string”未命名类型 std::字符串str; ^ 在classA.cpp中包含的文件中:3:0: h:6:25:警告:非静态数据成员初始值设定项仅可用于-std=c++11或-std=gnu++11 classB*ptr_b=新的classB 这是classA.h: #ifndef CLASSA_H #define CLASSA_H class

我有两个分开的类,无法修复编译器问题:

在classA.cpp中包含的文件中:2:0: classB.h:6:10:错误:命名空间“std”中的“string”未命名类型 std::字符串str; ^

在classA.cpp中包含的文件中:3:0: h:6:25:警告:非静态数据成员初始值设定项仅可用于-std=c++11或-std=gnu++11 classB*ptr_b=新的classB

这是classA.h:

#ifndef CLASSA_H
#define CLASSA_H

class classA {
private:
    classB *ptr_b = new classB;
public:
    classA();
};

#endif /* CLASSA_H */
classA.cpp:

#include "classB.h"
#include "classA.h"

classA::classA() {
}
B.h类:

#ifndef CLASSB_H
#define CLASSB_H

class classB {
private:
    std::string str;
public:
    classB();

};

#endif /* CLASSB_H */
classB.cpp:

#include <string>
#include "classB.h"

classB::classB() {
}
#包括
#包括“B.h类”
classB::classB(){
}
我感谢你所能给予的一切帮助。我不知道如何解决这个问题,我快疯了

感谢阅读。

您需要将
包含在
classB.h
中。现在
classA.cpp
包含
classB.h
而之前没有
#包含
任何地方,因此
classB.h
中包含的对
std::string
的引用会导致错误


通常,如果在标题
foo.h
中使用名称,则应包括在
foo.h
中声明名称的标题
bar.h
,或在
foo.h
中向前声明名称。否则,包括
foo.h
的所有其他人都需要记住确保首先包括
bar.h

您应该
#包括classB.h中的
。目前,它包含在classB.cpp中,但不包括classA.cpp(也包括classB.h)。如果我包含在classB.h中,我可以在classB.cpp上删除它?是的,如果它在classB.h中,你可以将它从classB.cpp中删除。@black0ltz如果该文件使用
std::string
,你也应该将它保存在classB.cpp中,请不要依赖间接包含,因为它们是脆弱的。如果在classB.cpp中不使用字符串,请随意删除它。那么,如果我在classB.cpp中使用字符串,我必须在classB.h和classB.cpp中包含它?我有点困惑。谢谢你的帮助。