0

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 ?

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459

2 Answers2

3

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];
utnapistim
  • 26,809
  • 3
  • 46
  • 82
1

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.

Afshin
  • 8,839
  • 1
  • 18
  • 53