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

    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?

    mrjjM Offline
    mrjjM Offline
    mrjj
    Lifetime Qt Champion
    wrote on 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 last edited by Q139
      #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

      mrjjM 1 Reply Last reply
      0
      • Q Q139

        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

        mrjjM Offline
        mrjjM Offline
        mrjj
        Lifetime Qt Champion
        wrote on last edited by mrjj
        #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 last edited by Q139
          #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

          mrjjM 1 Reply Last reply
          0
          • Q Q139

            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

            mrjjM Offline
            mrjjM Offline
            mrjj
            Lifetime Qt Champion
            wrote on last edited by mrjj
            #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 last edited by
              #12

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

              mrjjM 1 Reply Last reply
              0
              • Q Q139

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

                mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on 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

                mrjjM 1 Reply Last reply
                0
                • mrjjM mrjj

                  @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

                  mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on 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 last edited by Q139
                    #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
                    • mrjjM Offline
                      mrjjM Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on last edited by
                      #16

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

                      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