C++ 嵌套命名空间错误 - 预期类型说明符错误

Car*_*Ost 4 c++ namespaces

我一直在寻找这个问题的解决方案,我认为这是由于嵌套命名空间造成的。

波纹管我们有它的相关部分:

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。

I F*_*all 5

我认为这条线是你的问题:

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需要一个指向该块的指针。