How to share a global variable between files using header file?

I have a header file and 3 cpp files. I want to share an array object between my files to store data in it and use it (global variable).

My header file code : info.h

#ifndef INFO_H
#define INFO_H
#include "QString"
class ib
{
public:
    QString from,to,seat[32],driver;
}extern o[10];
#endif // INFO_H

and my cpp files code : bilit.cpp

#include "info.h"
void bilit::on_pushButton_clicked()
{
    const int f = ui->bnspin->value();
    const int s = ui->stspin->value();
    o[f].seat[s] = ui->pnbtn->text();
}

make.cpp

#include "info.h"
void make::on_pushButton_clicked()
{
    const int f = ui->spinBox->value();
    o[f].driver = ui->drvbtn->text();
    o[f].to = ui->tobtn->text();
    o[f].from = ui->frombtn->text();
}

check.cpp

#include "info.h"
void check::on_pushButton_clicked()
{
    const int f = ui->spinBox->value();
    const int s = ui->spinBox_2->value();
    ui->label->setText(o[f].seat[s]);
}

and this is my error : error

even i write extern in my cpp files but i get error again : error2

any idea how to fix it ? or other way to share a global variable between my files ?

Upvotes: 0

Views: 2661

Answers (2)

Afshin
Afshin

Reputation: 9173

if you use extern you need to have definition somewhere in one of your cpp files. Check here for more info.

I think if you change your files like this:

#ifndef INFO_H
#define INFO_H
#include "QString"
class ib
{
public:
    QString from,to,seat[32],driver;
};

extern ib o[10];
#endif
#include "info.h"

ib o[10]; // <-- here we define object that will be extern-ed.

void bilit::on_pushButton_clicked()
{
    const int f = ui->bnspin->value();
    const int s = ui->stspin->value();
    o[f].seat[s] = ui->pnbtn->text();
}

it will solve problem.

Upvotes: 1

utnapistim
utnapistim

Reputation: 27365

Declaring an object as extern can be done many times. All it means is "this object's linkage data is somewhere else".

Your code doesn't contain the "somewhere else" definition.

file.h:

extern int i; // i is defined somewhere else

file.cpp:

int i = 0; // this is the definition

some-other-file.cpp:

extern int i; // will use the same i in file.cpp
              // alternatively, to avoid duplicating the extern declaration,
              // you can just include file.h

To summarize, in one of your cpp files, you need to add:

ib o[10];

Upvotes: 3

Related Questions