C++ Class internal struct dynamic allocation at its method

I've got some trouble in allocating (::operator new) the declared structs inside an class, at its method, as getting an non-nub-readable error:

error: cannot convert 'Automata::state*' to 'state*' in assignment

\ I have tried removing the "Automata::" declaration, placing "this->" and other random things, no success. Follows an example code;

#include <iostream>
#include <new>

class Automata{
    public:
        struct quintuple{
            struct state *stateStr = NULL;
            int stateSize = 0;
        };
        struct state{
            struct symbol *symbolStr = NULL;
        };
        struct symbol{
            char *state = NULL;
            int stateSize = 0;
        };
        struct quintuple quintupleStr;
        //Functions
        void quintuple(int stateValidCounter);
};

void Automata::quintuple(int stateValidCounter){
    this->quintupleStr.stateStr = (struct Automata::state *) ::operator new(sizeof(struct Automata::state) * stateValidCounter);
    return;
}

int main(){
    Automata automata; 
    automata.quintuple(5);
    return 0;
}

/*
g++ -std=c++11 example.cpp -o example.out

example.cpp: In member function 'void Automata::quintuple(int)':
example.cpp:23:30: error: cannot convert 'Automata::state*' to 'state*' in assignment
  this->quintupleStr.stateStr = (struct Automata::state *) ::operator new(sizeof(struct Automata::state) * stateValidCounter);
                              ^
*/

Thank you for the attention.

Upvotes: 0

Views: 54

Answers (1)

Well, to be honest this is an sad tiredness event. I would like to accept the @Passer By if he answers at.

The answer is simple as @Passer By comment at main section.

Be the code

#include <iostream>
#include <new>

class Automata{
    public:
        struct quintuple{
            struct state *stateStr = NULL;
            int stateSize = 0;
        };
        struct state{....};
        struct quintuple quintupleStr;
        //Functions
        void quintuple(int stateValidCounter);
};

void Automata::quintuple(int stateValidCounter){
    this->quintupleStr.stateStr = (struct Automata::state *) ::operator new(sizeof(struct Automata::state) * stateValidCounter);
    return;
}

int main(){
    Automata automata; 
    automata.quintuple(5);
    return 0;
}

simply switch the struct code position..

class Automata{
    public:
        struct state{....};
        struct quintuple{
            struct state *stateStr = NULL;
            int stateSize = 0;
        };
        struct quintuple quintupleStr;
        ....;
};

I still think the compiler error is a little misleading

Upvotes: 2

Related Questions