Home > Mobile >  error: member access into incomplete type''; note: forward declaration of ''
error: member access into incomplete type''; note: forward declaration of ''

Time:05-18

Here is a struct MAIN which have member struct A and struct B, the code is like below

// a.hpp
#ifndef _A_HPP_
#define _A_HPP_
struct A
{
    int mem1;
};
#endif
// b.hpp
#ifndef _B_HPP_
#define _B_HPP_

#include "a.hpp"
#include "main.hpp"
struct MAIN;
struct A;

struct B{
    int mem2;
    MAIN* main;
    A *aptr;
    B(){
        *aptr=this->main->a;
    }
};


#endif
// main.hpp
#ifndef _MAIN_HPP_
#define _MAIN_HPP_

#include "a.hpp"
#include "b.hpp"

struct MAIN{
    A a;
    B b;
};

#endif
// main.cpp
#include "main.hpp"
int main(){
    MAIN m;
    return 0;
}

I'd like to use the aptr in struct B to visit A which in the same MAIN, but compile error like

In file included from main.cpp:2:
In file included from ./main.hpp:6:
./b.hpp:15:25: error: member access into incomplete type 'MAIN'
        *aptr=this->main->a;
                        ^
./b.hpp:7:8: note: forward declaration of 'MAIN'
struct MAIN;
       ^
1 error generated.

How the error occured? my code should use struct but not class, and hpp but not h with cpp. Is there anyway to fix it? Hope for help

CodePudding user response:

The definition of the constructor B::B inside the struct definition references members of MAIN, but the latter hasn't been fully defined yet.

You need to move the body of constructor B::B into a separate file, i.e. b.cpp, and link with main.cpp when building the executable.

  • Related