我有这个2分离的类,我无法解决这个编译器问题:
在classA.cpp中包含的文件中:2:0: classB.h:6:10:错误:命名空间'std'中的'string'没有命名类型 std :: string str; ^
在classA.cpp中包含的文件中:3:0: classA.h:6:25:警告:非静态数据成员初始值设定项仅适用于-std = c ++ 11或-std = gnu ++ 11 classB * ptr_b = new 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() {
}
classB.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() {
}
我赞成你能提供的所有帮助。我不知道如何解决这个问题而且我会发疯。
感谢阅读。
答案 0 :(得分:4)
#include <string>
中需要classB.h
。目前classA.cpp
包含classB.h
,之前没有任何#include <string>
,因此std::string
中classB.h
所包含的引用会导致错误。
通常,如果在标头foo.h
中使用了名称,则应包括在bar.h
中声明名称的标头foo.h
,或者在{{中转发声明名称1}}。否则,包含foo.h
的所有其他人都需要记住确保首先包含foo.h
。