错误:命名空间'std'中的'string'没有命名类型

时间:2016-05-17 23:00:50

标签: c++ class

我有这个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() {
}

我赞成你能提供的所有帮助。我不知道如何解决这个问题而且我会发疯。

感谢阅读。

1 个答案:

答案 0 :(得分:4)

#include <string>中需要classB.h。目前classA.cpp包含classB.h,之前没有任何#include <string>,因此std::stringclassB.h所包含的引用会导致错误。

通常,如果在标头foo.h中使用了名称,则应包括在bar.h中声明名称的标头foo.h,或者在{{中转发声明名称1}}。否则,包含foo.h的所有其他人都需要记住确保首先包含foo.h