我一直在寻找这个问题的解决方案,我认为这是由于嵌套命名空间造成的。
波纹管我们有它的相关部分:
implementation.hpp那是一个接口的实现
#ifndef IMPLEMENTATION_H
#define IMPLEMENTATION_H
#include "class_b.hpp"
namespace XPTO {
class Implementation : public XPTO::Interface {
public:
Implementation();
~Implementation() override;
ReturnStatus
initialize() override;
private:
CLASS_B::Class_B b; // namespace CLASS_B, class Class_B
};
}
#endif
Run Code Online (Sandbox Code Playgroud)
实现.cpp
#include "implementation.hpp"
XPTO::Implementation::Implementation() {}
XPTO::ReturnStatus
XPTO::Implementation::initialize() {
b = new CLASS_B::Class_B::Class_B();
//namespace ClASS_B, class Class_B and constructor Class_B()
}
Run Code Online (Sandbox Code Playgroud)
class_b.hpp
#ifndef CLASS_B_H
#define CLASS_B_H
namespace CLASS_B{
class Class_B {
public:
Class_B();
~Class_B();
void initialize();
};
}
#endif
Run Code Online (Sandbox Code Playgroud)
错误是 error: expected type-specifier b = new CLASS_B::Class_B::Class_B();
编译器指向命名空间 CLASS_B。
我认为这条线是你的问题:
b = new CLASS_B::Class_B::Class_B();
Run Code Online (Sandbox Code Playgroud)
它只需要:
b = new CLASS_B::Class_B();
Run Code Online (Sandbox Code Playgroud)
假设 b 已经在其他地方声明:
CLASS_B::Class_B()* b;
Run Code Online (Sandbox Code Playgroud)
如果您要分配一块内存,则new需要一个指向该块的指针。