C++ 错误:';字符串';在命名空间中';std&x27;不命名类型
我有两个分开的类,无法修复编译器问题: 在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: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
#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中包含它?我有点困惑。谢谢你的帮助。