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. 'extern' construction and undefined reference
Forum Updated to NodeBB v4.3 + New Features

'extern' construction and undefined reference

Scheduled Pinned Locked Moved General and Desktop
13 Posts 5 Posters 11.2k 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.
  • A Offline
    A Offline
    alan73
    wrote on last edited by
    #1

    Hello to all! Respect to all :)

    Please, help me with a question.
    I'm trying to compile library from sources with 'extern' construction:

    @A.cpp
    int A = 5;
    @

    @B.cpp
    extern int A;

    void foo()
    { A=10; }@

    But got an error: undefined reference to 'A' from 'foo()'. Both files are added to project. What it can be?
    Thanks!

    1 Reply Last reply
    0
    • napajejenunedk0N Offline
      napajejenunedk0N Offline
      napajejenunedk0
      wrote on last edited by
      #2

      Could you paste the contents of all files?

      1 Reply Last reply
      0
      • JeroentjehomeJ Offline
        JeroentjehomeJ Offline
        Jeroentjehome
        wrote on last edited by
        #3

        Hi,
        Adding extern int A in your B.cpp doesn't do anything for 'finding' A by the linker. It only tells the compiler that somewhere a variable exists named A. It is common practice to add the external definition to the header file corresponding to the source file where it is declared.
        So:
        @
        //A.cpp:
        int A = 5;
        //A.hpp:
        extern int A; // Make this variable known to the rest who includes this hpp file
        // B.cpp:
        #include "A.hpp"
        void foo()
        {
        A = 10;
        }
        @
        But to use a variable like this is more C programming and not C++/Object orientated programming.
        C++ options would be to make a public variable in a class / Maybe even a singleton class. But still it is possible.

        Greetz, Jeroen

        1 Reply Last reply
        0
        • S Offline
          S Offline
          shreesh
          wrote on last edited by
          #4

          Hi all,

          I have been trying to use this "extern" variable for my project, but could not figure out the exact way of doing it. Here is what I have done,

          I have a "login" form where I want to assign QString value to a "global_variable". And then use this saved value in a second form "account".

          Code I wrote is,

          @//login.h
          extern QString global_variable //throws error that, storage space assigned

          //login.cpp, in a signal slot function
          QString global_variable = ui->lineEdit->text();

          //account.cpp
          #include "login.h"

          QString exe = staff_username; // written under function
          //: account::account(QWidget *parent) :
          //QMainWindow(parent),
          //ui(new Ui::staff)

          ui->label_name->setText(exe); @

          Can anybody help me with this please?

          1 Reply Last reply
          0
          • S Offline
            S Offline
            shreesh
            wrote on last edited by
            #5

            Hi all,

            I have been trying to use this "extern" variable for my project, but could not figure out the exact way of doing it. Here is what I have done,

            I have a "login" form where I want to assign QString value to a "global_variable". And then use this saved value in a second form "account".

            Code I wrote is,

            @//login.h
            extern QString global_variable //throws error that, storage space assigned

            //login.cpp, in a signal slot function
            QString global_variable = ui->lineEdit->text();

            //account.cpp
            #include "login.h"

            QString exe = staff_username; // written under function
            //: account::account(QWidget *parent) :
            //QMainWindow(parent),
            //ui(new Ui::staff)

            ui->label_name->setText(exe); @

            Can anybody help me with this please?

            1 Reply Last reply
            0
            • A Offline
              A Offline
              andreyc
              wrote on last edited by
              #6

              If this construction is inside a function then it is not global variable.
              @
              //login.cpp, in a signal slot function
              QString global_variable = ui->lineEdit->text();
              @

              "Global variable":http://www.learncpp.com/cpp-tutorial/42-global-variables/ are declared outside of any functions.

              1 Reply Last reply
              0
              • A Offline
                A Offline
                andreyc
                wrote on last edited by
                #7

                If this construction is inside a function then it is not global variable.
                @
                //login.cpp, in a signal slot function
                QString global_variable = ui->lineEdit->text();
                @

                "Global variable":http://www.learncpp.com/cpp-tutorial/42-global-variables/ are declared outside of any functions.

                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  shreesh
                  wrote on last edited by
                  #8

                  Oh, yes. You were right.
                  But in my case I need to assign a value in a signal slot function.
                  How would you suggest me to go on this?

                  1 Reply Last reply
                  0
                  • S Offline
                    S Offline
                    shreesh
                    wrote on last edited by
                    #9

                    Oh, yes. You were right.
                    But in my case I need to assign a value in a signal slot function.
                    How would you suggest me to go on this?

                    1 Reply Last reply
                    0
                    • A Offline
                      A Offline
                      andreyc
                      wrote on last edited by
                      #10

                      You need to declare QString global_variable outside of slot function in login.cpp and assign it inside the function.
                      login.cpp
                      @
                      ...
                      QString global_variable;

                      void slot_function()
                      {
                      global_variable = "whatever";
                      }
                      @

                      PS: Using global variables is not good practice.
                      I would suggest to rethink a design and use class member variables or pass it through signal/slot.

                      1 Reply Last reply
                      0
                      • A Offline
                        A Offline
                        andreyc
                        wrote on last edited by
                        #11

                        You need to declare QString global_variable outside of slot function in login.cpp and assign it inside the function.
                        login.cpp
                        @
                        ...
                        QString global_variable;

                        void slot_function()
                        {
                        global_variable = "whatever";
                        }
                        @

                        PS: Using global variables is not good practice.
                        I would suggest to rethink a design and use class member variables or pass it through signal/slot.

                        1 Reply Last reply
                        0
                        • S Offline
                          S Offline
                          shreesh
                          wrote on last edited by
                          #12

                          Thanks a lot!!
                          I was stuck in this since hours.

                          It is working now..God bless!!

                          1 Reply Last reply
                          0
                          • S Offline
                            S Offline
                            shreesh
                            wrote on last edited by
                            #13

                            Thanks a lot!!
                            I was stuck in this since hours.

                            It is working now..God bless!!

                            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