Hi,
I tried to share some data between 2 .cc files hence declared the arrays of structure as extern in one of the .cc files.
However I get abnormal entries in the original array entries otherwise I wouldn't have got.
file1.h
---------
struct Mylistdetails {
int id;
int value;
}
file1.cc
----------
struct Mylistdetails myList_[MAX_NO];
file2.cc
-----------
#include <file1.h>
extern struct Mylistdetails myList_[MAX_NO];
The purpose here is to call these array data into the file2.Here,myList_[i].id and myList_[i].value are just unexpected once declared as 'extern'.If not used this extern method the expected values are observed once only file2 is being used.
Could you kindly specify the behaviour of this.Many thanks for your advise on how to tackle such a problem.
18 9115
did your code compile?
there is a ; missing in -
struct Mylistdetails {
-
int id;
-
int value;
-
}; // missing ;
and when including a file in the current directory it should be in ""
e.g. file2.cc -
#include "file1.h"
-
-
extern struct Mylistdetails myList_[MAX_NO];
-
you could put the extren declaration in the header file
did your code compile?
there is a ; missing in -
struct Mylistdetails {
-
int id;
-
int value;
-
}; // missing ;
It compiled without any problem.
and when including a file in the current directory it should be in ""
e.g. file2.cc -
#include "file1.h"
-
-
extern struct Mylistdetails myList_[MAX_NO];
-
you could put the extren declaration in the header file
well it is not in the current directory, so i specified the path
#include <direct/file1.h>
Yes I tried putting extern declaration in the heade file too(file1.h).Still doesn't work.
Thanks for your attention.
well it is not in the current directory, so i specified the path
#include <direct/file1.h>
Yes I tried putting extern declaration in the heade file too(file1.h).Still doesn't work.
Thanks for your attention.
I guess you are on a unix system, try -
#include "direct/file1.h"
assuming you have a directory direct in your current directory which contains the file1.h
I guess you are on a unix system, try -
#include "direct/file1.h"
assuming you have a directory direct in your current directory which contains the file1.h
I'm working on Linux, and it works normally in #include<direct/file1.h> style.
Could you explain me how could I use, extern with arrays of structure?
Thank you
-
#include <filename> // include file from 'standard' place
-
the file is assumed to be in a 'standard' directory in the file system which the C/C++ compiler automatically searches,. -
#include "filename" // include file from current directory else 'standard' place
-
The second form of #include (filename enclosed in "") searches the current directory for filename and then, if it is not found, the 'standard' directory.
which you use it depends where your direct/file1.h file is - in the 'standard' place or relative to the current directory?
try the following -
// file1.h
-
-
struct Mylistdetails {
-
int id;
-
int value;
-
};
-
-
#define MAX_NO 10
-
-
extern struct Mylistdetails myList_[MAX_NO];
-
-
void setup(); // function prototype - function in file2.cpp
-
-
// file2.cpp
-
-
#include "file1.h"
-
-
void setup()
-
{
-
for(int i=0;i<MAX_NO; i++)
-
myList_[i].id=i;
-
}
-
-
// file1.cpp
-
#include <cstdlib>
-
#include <iostream>
-
#include "file1.h"
-
-
using namespace std;
-
-
struct Mylistdetails myList_[MAX_NO];
-
-
int main(int argc, char *argv[])
-
{
-
setup();
-
for(int i=0;i<MAX_NO; i++)
-
cout << myList_[i].id << endl;
-
return EXIT_SUCCESS;
-
}
-
when i build this
g++ file1.cpp file2.cpp
and run it I get
./a
0
1
2
3
4
5
6
7
8
9
-
#include <filename> // include file from 'standard' place
-
the file is assumed to be in a 'standard' directory in the file system which the C/C++ compiler automatically searches,. -
#include "filename" // include file from current directory else 'standard' place
-
The second form of #include (filename enclosed in "") searches the current directory for filename and then, if it is not found, the 'standard' directory.
which you use it depends where your direct/file1.h file is - in the 'standard' place or relative to the current directory?
try the following -
// file1.h
-
-
struct Mylistdetails {
-
int id;
-
int value;
-
};
-
-
#define MAX_NO 10
-
-
extern struct Mylistdetails myList_[MAX_NO];
-
-
void setup(); // function prototype - function in file2.cpp
-
-
// file2.cpp
-
-
#include "file1.h"
-
-
void setup()
-
{
-
for(int i=0;i<MAX_NO; i++)
-
myList_[i].id=i;
-
}
-
-
// file1.cpp
-
#include <cstdlib>
-
#include <iostream>
-
#include "file1.h"
-
-
using namespace std;
-
-
struct Mylistdetails myList_[MAX_NO];
-
-
int main(int argc, char *argv[])
-
{
-
setup();
-
for(int i=0;i<MAX_NO; i++)
-
cout << myList_[i].id << endl;
-
return EXIT_SUCCESS;
-
}
-
when i build this
g++ file1.cpp file2.cpp
and run it I get
./a
0
1
2
3
4
5
6
7
8
9
In fact I want to retrieve file1 data into file2.If I understand your code correctly it does the other way round.
I tried this way and when I compile I get the following error
file1.h:270: error: storage class specified for 'myList_'
Thank you for your suggestions.
try this which passes data from file1.cpp to file2.cpp -
// file1.h
-
-
struct Mylistdetails {
-
int id;
-
int value;
-
};
-
-
#define MAX_NO 10
-
-
extern struct Mylistdetails myList_[MAX_NO];
-
-
void setup(); // function prototype - function in file1.cpp
-
void print(); // function prototype - function in file2.cpp
-
-
-
// file2.cpp
-
-
#include <iostream>
-
#include "file1.h"
-
-
using namespace std;
-
-
-
void print()
-
{
-
for(int i=0;i<MAX_NO; i++)
-
cout << myList_[i].id << endl;
-
}
-
-
-
// file1.cpp
-
-
#include <cstdlib>
-
#include <iostream>
-
#include "file1.h"
-
-
using namespace std;
-
-
struct Mylistdetails myList_[MAX_NO];
-
-
void setup()
-
{
-
for(int i=0;i<MAX_NO; i++)
-
myList_[i].id=i;
-
}
-
-
-
int main(int argc, char *argv[])
-
{
-
setup();
-
print();
-
return EXIT_SUCCESS;
-
}
-
try this which passes data from file1.cpp to file2.cpp -
// file1.h
-
-
struct Mylistdetails {
-
int id;
-
int value;
-
};
-
-
#define MAX_NO 10
-
-
extern struct Mylistdetails myList_[MAX_NO];
-
-
void setup(); // function prototype - function in file1.cpp
-
void print(); // function prototype - function in file2.cpp
-
-
-
// file2.cpp
-
-
#include <iostream>
-
#include "file1.h"
-
-
using namespace std;
-
-
-
void print()
-
{
-
for(int i=0;i<MAX_NO; i++)
-
cout << myList_[i].id << endl;
-
}
-
-
-
// file1.cpp
-
-
#include <cstdlib>
-
#include <iostream>
-
#include "file1.h"
-
-
using namespace std;
-
-
struct Mylistdetails myList_[MAX_NO];
-
-
void setup()
-
{
-
for(int i=0;i<MAX_NO; i++)
-
myList_[i].id=i;
-
}
-
-
-
int main(int argc, char *argv[])
-
{
-
setup();
-
print();
-
return EXIT_SUCCESS;
-
}
-
I still get this error while trying to compile.
file1.h:270: error: storage class specified for ‘myList_’
Thank you
I still get this error while trying to compile.
file1.h:270: error: storage class specified for ‘myList_’
Thank you
I have run the code in my last post on Linux and Windows (using Cygwin). I compile with
g++ file1.cpp file2.cpp
then execute the file a.out or a.exe OK
Hi,
I tried to share some data between 2 .cc files hence declared the arrays of structure as extern in one of the .cc files.
However I get abnormal entries in the original array entries otherwise I wouldn't have got.
file1.h
---------
struct Mylistdetails {
int id;
int value;
}
file1.cc
----------
struct Mylistdetails myList_[MAX_NO];
file2.cc
-----------
#include <file1.h>
extern struct Mylistdetails myList_[MAX_NO];
The purpose here is to call these array data into the file2.Here,myList_[i].id and myList_[i].value are just unexpected once declared as 'extern'.If not used this extern method the expected values are observed once only file2 is being used.
Could you kindly specify the behaviour of this.Many thanks for your advise on how to tackle such a problem.
If you are getting unexpected values, perhaps your MAX_NO is not defined the same value in each file. I see no reference to it.
Adrian
I have run the code in my last post on Linux and Windows (using Cygwin). I compile with
g++ file1.cpp file2.cpp
then execute the file a.out or a.exe OK
I managed to compile it this time, but the ultimate result is the same as I got when I declared extern struct in both the .cc files (like in my first posting)
Thanks
I managed to compile it this time, but the ultimate result is the same as I got when I declared extern struct in both the .cc files (like in my first posting)
Thanks
What I observe is when declared as extern, it maintains a single instance hence overwrites the array, whereas otherwise it maintains multiple instances giving each value,id pair.
If I'm to elaborate a bit:
This i do to maintain a neighbor table that corresponds to each node, so when
you run file2.cc alone(without extern), each node has it's own neighbor table(with corresponding id,value pair of its neighbors)
when I call extern, it gives a list of entries which I can not figureout.The onlything I could see is starting from the same initial set of {id,val} it keeps on populating the same array until you reach the MAX_NO of neighbors.
So there's no correlation of nodes and their neighbor table.
by using extern you have one struct Mylistdetails array shared by both file1.cpp and file2.cpp. Is this what you want?
or do you want two seperate arrays, one in file1.cpp and the other in file2.cpp?
I don't understand what you are trying to do?
by using extern you have one struct Mylistdetails array shared by both file1.cpp and file2.cpp. Is this what you want?
or do you want two seperate arrays, one in file1.cpp and the other in file2.cpp?
I don't understand what you are trying to do?
Well, I want the file2.cc to be capable of accessing information maintained by arrays in file1.cc.
i.e file1 maintains {id,val} information for each node;and file2 tries to retrieve this information.
Thanks for your questions and suggestions.
Well, I want the file2.cc to be capable of accessing information maintained by arrays in file1.cc.
i.e file1 maintains {id,val} information for each node;and file2 tries to retrieve this information.
Thanks for your questions and suggestions.
in my last post function setup() in File1.cpp put data into myList[] and function print() in file2.cpp extracted and displayed it. Is you problem more complex than this, e.g. do you have other data structures to share?
in my last post function setup() in File1.cpp put data into myList[] and function print() in file2.cpp extracted and displayed it. Is you problem more complex than this, e.g. do you have other data structures to share?
I simply require the array instances in file1.cc to be reflected in file2.cc.
The problem I see is whenever I define extern in file1.h without even trying to retrieve from file2.cc, the values indicated in original arrays of struct go haywire.
I simply require the array instances in file1.cc to be reflected in file2.cc.
The problem I see is whenever I define extern in file1.h without even trying to retrieve from file2.cc, the values indicated in original arrays of struct go haywire.
in this version function setup() in File1.cpp puts data into myList[], function print() in file2.cpp extracts and displays it and changes it, when it is displayed in file1.cpp. -
// file1.h
-
-
struct Mylistdetails {
-
int id;
-
int value;
-
};
-
-
#define MAX_NO 10
-
-
extern struct Mylistdetails myList_[MAX_NO];
-
-
void setup(); // function prototype - function in file1.cpp
-
void print(); // function prototype - function in file2.cpp
-
-
- // file2.cpp
-
-
#include <iostream>
-
#include "file1.h"
-
-
using namespace std;
-
-
-
void print()
-
{
-
for(int i=0;i<MAX_NO; i++)
-
{
-
cout << "in file2 id = " << myList_[i].id << endl;
-
myList_[i].value=i*100;
-
}
-
}
- // file1.cpp
-
-
#include <cstdlib>
-
#include <iostream>
-
#include "file1.h"
-
-
using namespace std;
-
-
struct Mylistdetails myList_[MAX_NO];
-
-
void setup()
-
{
-
for(int i=0;i<MAX_NO; i++)
-
myList_[i].id=i;
-
}
-
-
-
int main(int argc, char *argv[])
-
{
-
setup();
-
print();
-
for(int i=0;i<MAX_NO; i++)
-
{
-
cout << "in file 1 id= " << myList_[i].id <<
-
" value = " << myList_[i].value << endl;
-
}
-
-
system("PAUSE");
-
return EXIT_SUCCESS;
-
}
a run gives
in file2 id = 0
in file2 id = 1
in file2 id = 2
in file2 id = 3
in file2 id = 4
in file2 id = 5
in file2 id = 6
in file2 id = 7
in file2 id = 8
in file2 id = 9
in file 1 id= 0 value = 0
in file 1 id= 1 value = 100
in file 1 id= 2 value = 200
in file 1 id= 3 value = 300
in file 1 id= 4 value = 400
in file 1 id= 5 value = 500
in file 1 id= 6 value = 600
in file 1 id= 7 value = 700
in file 1 id= 8 value = 800
in file 1 id= 9 value = 900
Press any key to continue . . .
could you post the code which is giving you problems?
in this version function setup() in File1.cpp puts data into myList[], function print() in file2.cpp extracts and displays it and changes it, when it is displayed in file1.cpp. -
// file1.h
-
-
struct Mylistdetails {
-
int id;
-
int value;
-
};
-
-
#define MAX_NO 10
-
-
extern struct Mylistdetails myList_[MAX_NO];
-
-
void setup(); // function prototype - function in file1.cpp
-
void print(); // function prototype - function in file2.cpp
-
-
- // file2.cpp
-
-
#include <iostream>
-
#include "file1.h"
-
-
using namespace std;
-
-
-
void print()
-
{
-
for(int i=0;i<MAX_NO; i++)
-
{
-
cout << "in file2 id = " << myList_[i].id << endl;
-
myList_[i].value=i*100;
-
}
-
}
- // file1.cpp
-
-
#include <cstdlib>
-
#include <iostream>
-
#include "file1.h"
-
-
using namespace std;
-
-
struct Mylistdetails myList_[MAX_NO];
-
-
void setup()
-
{
-
for(int i=0;i<MAX_NO; i++)
-
myList_[i].id=i;
-
}
-
-
-
int main(int argc, char *argv[])
-
{
-
setup();
-
print();
-
for(int i=0;i<MAX_NO; i++)
-
{
-
cout << "in file 1 id= " << myList_[i].id <<
-
" value = " << myList_[i].value << endl;
-
}
-
-
system("PAUSE");
-
return EXIT_SUCCESS;
-
}
a run gives
in file2 id = 0
in file2 id = 1
in file2 id = 2
in file2 id = 3
in file2 id = 4
in file2 id = 5
in file2 id = 6
in file2 id = 7
in file2 id = 8
in file2 id = 9
in file 1 id= 0 value = 0
in file 1 id= 1 value = 100
in file 1 id= 2 value = 200
in file 1 id= 3 value = 300
in file 1 id= 4 value = 400
in file 1 id= 5 value = 500
in file 1 id= 6 value = 600
in file 1 id= 7 value = 700
in file 1 id= 8 value = 800
in file 1 id= 9 value = 900
Press any key to continue . . .
could you post the code which is giving you problems?
when extern storage class is called, could the arrays of structure hold multiple instances..
Because this arrays of file1.cc hold neighbor information of nodes (time varying) and when extern is called that behavior is no more there.
Could send 'you' the files .Thanks for your suggestions
Sign in to post your reply or Sign up for a free account.
Similar topics
by: Kieran Simkin |
last post by:
I have in my project in main.c a number of arrays defined like this (outside
of any functions):
char muser, mpass;
I'm declaring them in a number of other .c files (inside functions) like
this:...
|
by: Peter Seaman |
last post by:
I understand that structures are value types and arrays and classes are
reference types. But what about arrays as members of structures i.e. as in
C
struct x
{
int n;
int a;
}
|
by: Jeff |
last post by:
I am struggling with the following
How do I marshal/access a pointer to an array of strings within a structure
Than
Jef
----------------------------------------------------------------
|
by: balasam |
last post by:
Dear friend,
I am having Linux platform.I am declaring the array of
structure in one file and how can access the values of the array of
structure in another file.
Using " extern " ,to extern...
|
by: David Fort |
last post by:
Hi,
I'm upgrading a VB6 app to VB.net and I'm having a problem with a call to a
function provided in a DLL.
The function takes the address of a structure which it will fill in with
values.
I...
|
by: ruffiano |
last post by:
I have a file called first.cpp that contains the following
declarations:
static const char *MY_STRING1 = "My first string";
static const char *MY_STRING2 = "My second string"
If I wanted to use...
|
by: Aston Martin |
last post by:
Hi All,
********************** My Situation **********************
I am working on project that involves passing a structure to unmanaged
code from .Net world (well using C#). Perhaps an example...
|
by: Scoots |
last post by:
I know the usually applied workaround for multiple definitions of
header files, but I have a problem on this one.
This time, I can't just ifndef the header file that defines my
structure.
So...
|
by: sharat |
last post by:
Hi all.
I am writing a a code in c++ . i have defined a global structure in a
header file(user define header file) say headerfile1.h and declared a
class in file2.h which is having some public...
|
by: emmanuelkatto |
last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud.
Please let me know.
Thanks!
Emmanuel
|
by: BarryA |
last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
|
by: nemocccc |
last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
|
by: Hystou |
last post by:
There are some requirements for setting up RAID:
1. The motherboard and BIOS support RAID configuration.
2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
|
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new...
| |