Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Compiler does not produce .o file , just a moc_.o and moc_.cpp files.

Compiler does not produce .o file , just a moc_.o and moc_.cpp files.

Scheduled Pinned Locked Moved Solved General and Desktop
32 Posts 3 Posters 12.2k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • kshegunovK kshegunov

    @ddze

    Still, not sure why that line compiles in another program.

    This seems doubtful, but it doesn't matter. I'm glad it works and for this particular case you could use:

    dynamic_cast<IBase*>(event->source())
    

    instead of qobject_cast and everything should compile and run fine.

    Cheers!

    D Offline
    D Offline
    ddze
    wrote on last edited by ddze
    #23

    @kshegunov ,

    dynamic_cast did not work, but the reinterpret_cast compiled ok.

    kshegunovK 1 Reply Last reply
    0
    • D ddze

      @kshegunov ,

      dynamic_cast did not work, but the reinterpret_cast compiled ok.

      kshegunovK Offline
      kshegunovK Offline
      kshegunov
      Moderators
      wrote on last edited by
      #24

      @ddze

      dynamic_cast did not work, but the reinterpret_cast was ok.

      You shouldn't use reinterpret_cast, it's not for that purpose. What's the problem with the dynamic_cast?

      Read and abide by the Qt Code of Conduct

      D 1 Reply Last reply
      0
      • kshegunovK kshegunov

        @ddze

        dynamic_cast did not work, but the reinterpret_cast was ok.

        You shouldn't use reinterpret_cast, it's not for that purpose. What's the problem with the dynamic_cast?

        D Offline
        D Offline
        ddze
        wrote on last edited by ddze
        #25

        @kshegunov

        here is the ...

        error: cannot dynamic_cast 'event->QDragEnterEvent::<anonymous>.QDragMoveEvent::<anonymous>.QDropEvent::source()' (of type 'class QObject*') to type 'class IBase*' (target is not pointer or reference to complete type)
        IBase source = dynamic_cast<IBase>(event->source());
        ^

        seems like that dynamic_cast cannot cast if the object is not instantiated completely ...

        kshegunovK 1 Reply Last reply
        0
        • D ddze

          @kshegunov

          here is the ...

          error: cannot dynamic_cast 'event->QDragEnterEvent::<anonymous>.QDragMoveEvent::<anonymous>.QDropEvent::source()' (of type 'class QObject*') to type 'class IBase*' (target is not pointer or reference to complete type)
          IBase source = dynamic_cast<IBase>(event->source());
          ^

          seems like that dynamic_cast cannot cast if the object is not instantiated completely ...

          kshegunovK Offline
          kshegunovK Offline
          kshegunov
          Moderators
          wrote on last edited by
          #26

          @ddze

          IBase source = dynamic_cast<IBase>(event->source());
          

          I don't see the stars ...! dynamic_cast works only on pointers (or references), so this line is quite simply invalid. You can't have polymorphic cast on an object, it just doesn't make sense. You can however do it on a pointer to that object.

          IBase * source = dynamic_cast<IBase *>(event->source());
          

          Should work just fine.

          Read and abide by the Qt Code of Conduct

          D 1 Reply Last reply
          0
          • kshegunovK kshegunov

            @ddze

            IBase source = dynamic_cast<IBase>(event->source());
            

            I don't see the stars ...! dynamic_cast works only on pointers (or references), so this line is quite simply invalid. You can't have polymorphic cast on an object, it just doesn't make sense. You can however do it on a pointer to that object.

            IBase * source = dynamic_cast<IBase *>(event->source());
            

            Should work just fine.

            D Offline
            D Offline
            ddze
            wrote on last edited by ddze
            #27

            @kshegunov

            here is the line IBase *source = dynamic_cast<IBase*>(event->source()); , not the pointer

            kshegunovK 1 Reply Last reply
            0
            • D ddze

              @kshegunov

              here is the line IBase *source = dynamic_cast<IBase*>(event->source()); , not the pointer

              kshegunovK Offline
              kshegunovK Offline
              kshegunov
              Moderators
              wrote on last edited by kshegunov
              #28

              @ddze
              Okay then, your previous post didn't reflect that. Anyway, have you included the header where the IBase class resides?

              PS:
              Oh, I see, because you pasted the code as text, and the forum parser recognised the the asterisks and made the text italic ... heh.

              Read and abide by the Qt Code of Conduct

              D 1 Reply Last reply
              1
              • kshegunovK kshegunov

                @ddze
                Okay then, your previous post didn't reflect that. Anyway, have you included the header where the IBase class resides?

                PS:
                Oh, I see, because you pasted the code as text, and the forum parser recognised the the asterisks and made the text italic ... heh.

                D Offline
                D Offline
                ddze
                wrote on last edited by ddze
                #29

                @kshegunov

                you are 100% correct , it was the header file missing .... . The other project has the header IBase , that is why it compiles .... probably I deleted it accidentally or by trying the things out. (Should use a diff from now on)

                1 Reply Last reply
                0
                • D Offline
                  D Offline
                  ddze
                  wrote on last edited by ddze
                  #30

                  once on this topic , what would happen if one has a cross-reference include headers ?

                  I noticed few times that only if I declare a class forward declaration skipping an include of the header to be able to compile. Would in that case be ok to use reinterpret_cast as the dynamic_cast may needed the full header?

                  probably this applies

                  An expression of integral, enumeration, pointer, or pointer-to-member type can be converted to its own type. The resulting value is the same as the value of expression. (since C++11)

                  Ref: reinterpret_cast

                  kshegunovK 1 Reply Last reply
                  0
                  • D ddze

                    once on this topic , what would happen if one has a cross-reference include headers ?

                    I noticed few times that only if I declare a class forward declaration skipping an include of the header to be able to compile. Would in that case be ok to use reinterpret_cast as the dynamic_cast may needed the full header?

                    probably this applies

                    An expression of integral, enumeration, pointer, or pointer-to-member type can be converted to its own type. The resulting value is the same as the value of expression. (since C++11)

                    Ref: reinterpret_cast

                    kshegunovK Offline
                    kshegunovK Offline
                    kshegunov
                    Moderators
                    wrote on last edited by kshegunov
                    #31

                    @ddze
                    No, not at all. dynamic_cast is polymorphic cast, it goes looks up the virtual table and makes safe casting for object pointers. reinterpret_cast is a different kettle of fish entirely, it just switches from one "interpretation" of data to another (whence the name). So it's completely legal to cast pretty much anything with reinterpret_cast but it's a bad idea, because it can be quite error-prone.

                    You can do this:

                    struct SomeStruct
                    {
                        int a;
                        double b;
                        QString x;
                    };
                    
                    SomeStruct * variable = new SomeStruct;
                    char * bytes = reinterpret_cast<char *>(variable);  //< This is valid, compiles and runs just fine. Only problem is, you may accidentally modify memory that's not yours ...
                    

                    And you have the whole structure as an array of bytes ... but it's ill advised to do such things in general. reinterpret_cast is similar to the functionality the union provides.
                    So as rule of thumb, do not use reinterpret_cast.

                    Read and abide by the Qt Code of Conduct

                    D 1 Reply Last reply
                    1
                    • kshegunovK kshegunov

                      @ddze
                      No, not at all. dynamic_cast is polymorphic cast, it goes looks up the virtual table and makes safe casting for object pointers. reinterpret_cast is a different kettle of fish entirely, it just switches from one "interpretation" of data to another (whence the name). So it's completely legal to cast pretty much anything with reinterpret_cast but it's a bad idea, because it can be quite error-prone.

                      You can do this:

                      struct SomeStruct
                      {
                          int a;
                          double b;
                          QString x;
                      };
                      
                      SomeStruct * variable = new SomeStruct;
                      char * bytes = reinterpret_cast<char *>(variable);  //< This is valid, compiles and runs just fine. Only problem is, you may accidentally modify memory that's not yours ...
                      

                      And you have the whole structure as an array of bytes ... but it's ill advised to do such things in general. reinterpret_cast is similar to the functionality the union provides.
                      So as rule of thumb, do not use reinterpret_cast.

                      D Offline
                      D Offline
                      ddze
                      wrote on last edited by
                      #32

                      @kshegunov

                      Thanks a lot.

                      1 Reply Last reply
                      0

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved