I've being searching for the solution of this problem, and I think it has something due to nested namespaces.
Bellow we have the relevant part of it:
implementation.hpp That is an implementation of an Interface
#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
implementation.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()
}
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
The error is error: expected type-specifier b = new CLASS_B::Class_B::Class_B();
The compiler is pointing to the namespace CLASS_B.
I think this line is your problem:
b = new CLASS_B::Class_B::Class_B(); 
It only needs to be:
b = new CLASS_B::Class_B(); 
Assuming b is already declared somewhere else:
CLASS_B::Class_B()* b;
If you are allocating a block of memory with new you need a pointer to point to that block.
You are missing the type of b in the declaration which must be specified before the identifier name. Try changing
b = new CLASS_B::Class_B::Class_B(); 
to
CLASS_B::Class_B *b = new CLASS_B::Class_B(); 
If you intended to initialize the private member b in the initialize() method then you would need to declare it as a pointer, since new returns a pointer.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With