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. How to initialize class with pointer to class
Forum Updated to NodeBB v4.3 + New Features

How to initialize class with pointer to class

Scheduled Pinned Locked Moved Solved General and Desktop
16 Posts 2 Posters 3.5k Views 1 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.
  • Q Q139
    6 Nov 2015, 13:43

    Yes included , problem was due to double include in 2 files.
    Is it possible to include file only for .h inside use so when other files include same .h part of files would not be double included?

    M Offline
    M Offline
    mrjj
    Lifetime Qt Champion
    wrote on 6 Nov 2015, 13:50 last edited by
    #7

    @Q139
    it is normal to include .h many times.

    Are you using guards ?

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    #endif

    1 Reply Last reply
    0
    • Q Offline
      Q Offline
      Q139
      wrote on 6 Nov 2015, 13:58 last edited by Q139 11 Jun 2015, 14:00
      #8

      For example when include file1.h in file2.h and file2.h in file1.h compiler returns error: expected ')' before '' token FileCOM(TCP_SocketSOCKETptr); or mostly error: 'FileCOM' does not name a type

      For pointer of class A in class B it need include class A .h in B .h file, but for class A to create object of B in .h file it need include of B .h file

      M 1 Reply Last reply 6 Nov 2015, 14:00
      0
      • Q Q139
        6 Nov 2015, 13:58

        For example when include file1.h in file2.h and file2.h in file1.h compiler returns error: expected ')' before '' token FileCOM(TCP_SocketSOCKETptr); or mostly error: 'FileCOM' does not name a type

        For pointer of class A in class B it need include class A .h in B .h file, but for class A to create object of B in .h file it need include of B .h file

        M Offline
        M Offline
        mrjj
        Lifetime Qt Champion
        wrote on 6 Nov 2015, 14:00 last edited by mrjj 11 Jun 2015, 14:02
        #9

        @Q139

        Ah, that is called circular include and often solved by using type forwards.
        https://en.wikipedia.org/wiki/Circular_dependency

        like
        in your case
        class TCP_Socket; //forward declaration

        class FileCOM : public QObject
        {
        TCP_Socket *mykeptpointer;
        ....

        and then DONT include its .h file

        1 Reply Last reply
        0
        • Q Offline
          Q Offline
          Q139
          wrote on 6 Nov 2015, 14:03 last edited by Q139 11 Jun 2015, 14:04
          #10

          Then it is not possible to declare class FileCOM in .h file of TCP_Socket only .cpp file
          Thanks for your time and help, problem is there are multiple instances of sockets and each one should have fileCOM

          M 1 Reply Last reply 6 Nov 2015, 14:05
          0
          • Q Q139
            6 Nov 2015, 14:03

            Then it is not possible to declare class FileCOM in .h file of TCP_Socket only .cpp file
            Thanks for your time and help, problem is there are multiple instances of sockets and each one should have fileCOM

            M Offline
            M Offline
            mrjj
            Lifetime Qt Champion
            wrote on 6 Nov 2015, 14:05 last edited by mrjj 11 Jun 2015, 14:05
            #11

            @Q139
            well you should never have data in the .h file.

            but you can using external;
            in .h
            extern TCP_Socket * TheOnlyInstance;

            and in .cpp
            TCP_Socket * TheOnlyInstance;

            1 Reply Last reply
            0
            • Q Offline
              Q Offline
              Q139
              wrote on 6 Nov 2015, 14:06 last edited by
              #12

              Thanks , will read materials on circular dependency as have had many problem with this.

              M 1 Reply Last reply 6 Nov 2015, 14:07
              0
              • Q Q139
                6 Nov 2015, 14:06

                Thanks , will read materials on circular dependency as have had many problem with this.

                M Offline
                M Offline
                mrjj
                Lifetime Qt Champion
                wrote on 6 Nov 2015, 14:07 last edited by
                #13

                @Q139
                well we all have :)

                Well in your case:
                using external.

                then in mainwindow, u include TCP_Socket.H

                then you have the instance to give to the other objects when you create them

                M 1 Reply Last reply 6 Nov 2015, 14:13
                0
                • M mrjj
                  6 Nov 2015, 14:07

                  @Q139
                  well we all have :)

                  Well in your case:
                  using external.

                  then in mainwindow, u include TCP_Socket.H

                  then you have the instance to give to the other objects when you create them

                  M Offline
                  M Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on 6 Nov 2015, 14:13 last edited by
                  #14

                  @Q139 said:

                  there are multiple instances of sockets and each one should have fileCOM

                  the same file com?

                  1 Reply Last reply
                  0
                  • Q Offline
                    Q Offline
                    Q139
                    wrote on 6 Nov 2015, 14:31 last edited by Q139 11 Jun 2015, 14:37
                    #15

                    Yes same class but different filenames.
                    Foward declaration is good solution and compiles , if it work good , appears to be complex solution for easy problem.

                    .h file

                    class TCP_Socket;

                    class FileCOM : public QObject
                    {
                    public:
                    TCP_Socket * SOCKETptr;
                    FileCOM(TCP_Socket * ptr){
                    SOCKETptr=ptr;
                    }

                    .h file

                    class TCP_Socket : public QObject
                    {
                    public:
                    FileCOM * FILE;

                    .cpp file

                    void TCP_Server_File::NewConnection()
                    {
                    TCP_Socket *soc = new TCP_Socket;
                    soc->FILE = new FileCOM(soc); <--- if working then here it should pointer of TCP_Socket class to FileCOM class.
                    soc->New_socket (server->nextPendingConnection ());
                    mainwin_ptr->AskForNewConnection (soc);
                    Client_count++;
                    }

                    1 Reply Last reply
                    0
                    • M Offline
                      M Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on 6 Nov 2015, 14:36 last edited by
                      #16

                      it seems fine.
                      SOCKETptr should be the object u expect.

                      1 Reply Last reply
                      0

                      16/16

                      6 Nov 2015, 14:36

                      • Login

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