By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,261 Members | 1,325 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,261 IT Pros & Developers. It's quick & easy.

Using constant variables in header file

P: n/a
Hi,

I have one constant variable and want to use it in two files. I put it in
the header file and then include the header file. The compiler always say
"error C2370: 'arraysize' : redefinition; different storage class". What
shall I do? Files are listed below. I'm using Visual C++ 6.0

By the way, how to use STL (vector , for example) to create a
multi-dimension array?

Many thanks.

Karen
---------------------------------
my header file - consts.h:
const int arraysize = 15;

my sources file 1 - op1.cpp:

#include consts.h
char array1[arraysize];

my source file 2 - op2.cpp:

#include consts.h
char array2[arraysize];


Jul 19 '05 #1
Share this Question
Share on Google+
7 Replies


P: n/a
"Karen" <Ka********@yahoo.com> wrote...
I have one constant variable and want to use it in two files. I put it in
the header file and then include the header file. The compiler always say
"error C2370: 'arraysize' : redefinition; different storage class". What
shall I do? Files are listed below. I'm using Visual C++ 6.0

By the way, how to use STL (vector , for example) to create a
multi-dimension array?

Many thanks.

Karen
---------------------------------
my header file - consts.h:
const int arraysize = 15;

my sources file 1 - op1.cpp:

#include consts.h
char array1[arraysize];

my source file 2 - op2.cpp:

#include consts.h
char array2[arraysize];


The only error I can see in those two translation units is that
the #include directory doesn't have the header name in either
double quotes or angle brackets. Beyond that, everything should
be fine.

Perhaps you should post the actual code that produces the error.

To create a multidimensional array from std::vector, create
a vector of vectors [of vectors ...] of the needed type:

std::vector<std::vector< ... <int> ... > > mda;

Don't forget to resize the mda. Or you could initialise it
with needed sizes for each dimension.

Victor
Jul 19 '05 #2

P: n/a
"Karen" <Ka********@yahoo.com> wrote...
I have one constant variable and want to use it in two files. I put it in
the header file and then include the header file. The compiler always say
"error C2370: 'arraysize' : redefinition; different storage class". What
shall I do? Files are listed below. I'm using Visual C++ 6.0

By the way, how to use STL (vector , for example) to create a
multi-dimension array?

Many thanks.

Karen
---------------------------------
my header file - consts.h:
const int arraysize = 15;

my sources file 1 - op1.cpp:

#include consts.h
char array1[arraysize];

my source file 2 - op2.cpp:

#include consts.h
char array2[arraysize];


The only error I can see in those two translation units is that
the #include directory doesn't have the header name in either
double quotes or angle brackets. Beyond that, everything should
be fine.

Perhaps you should post the actual code that produces the error.

To create a multidimensional array from std::vector, create
a vector of vectors [of vectors ...] of the needed type:

std::vector<std::vector< ... <int> ... > > mda;

Don't forget to resize the mda. Or you could initialise it
with needed sizes for each dimension.

Victor
Jul 19 '05 #3

P: n/a
Karen <Ka********@yahoo.com> writes
I have one constant variable and want to use it in two files. I put it in
the header file and then include the header file. The compiler always say
"error C2370: 'arraysize' : redefinition; different storage class". What
shall I do? Files are listed below. I'm using Visual C++ 6.0 ---------------------------------
my header file - consts.h:
const int arraysize = 15;


should that be:
static const int arraysize = 15;

By omitting the 'static' keyword, you're defining a variable with
external linkage. You're only allowed to do this once.

--
Simon Elliott
http://www.ctsn.co.uk/


Jul 19 '05 #4

P: n/a
"Simon Elliott" <si***@nospam.demon.co.uk> wrote...
Karen <Ka********@yahoo.com> writes
I have one constant variable and want to use it in two files. I put it in
the header file and then include the header file. The compiler always say
"error C2370: 'arraysize' : redefinition; different storage class". What
shall I do? Files are listed below. I'm using Visual C++ 6.0
---------------------------------
my header file - consts.h:
const int arraysize = 15;


should that be:
static const int arraysize = 15;


Doesn't have to.

By omitting the 'static' keyword, you're defining a variable with
external linkage. You're only allowed to do this once.


See 3.5/3. 'const' objects have internal linkage if _not_ declared
'extern' and _not_ previously declared to have external linkage.

Victor
Jul 19 '05 #5

P: n/a
Karen wrote:
Hi,

I have one constant variable and want to use it in two files. I put it in
the header file and then include the header file. The compiler always say
"error C2370: 'arraysize' : redefinition; different storage class". What
shall I do? Files are listed below. I'm using Visual C++ 6.0

By the way, how to use STL (vector , for example) to create a
multi-dimension array?

Many thanks.

Karen
---------------------------------
my header file - consts.h:
const int arraysize = 15;

my sources file 1 - op1.cpp:

#include consts.h
#include "consts.h" // you forgot the quotes
char array1[arraysize];

my source file 2 - op2.cpp:

#include consts.h #include "consts.h"
char array2[arraysize];


The reason for the multiple definition error is that you need what's
referred to as an include guard:

//////////////////////////
// consts.h

#ifndef CONSTS_H_INCLUDED
#define CONSTS_H_INCLUDED

const int arraysize = 15;

#endif // include guard
/////////////////////////

What that does is ensures that the header file is only included once in
each compilation unit. Try that in your program, and then read up on
include guards in your favorite reference book. There may also be
something in the newsgroup's FAQ.

- Adam

--
Reverse domain name to reply.

Jul 19 '05 #6

P: n/a
Karen wrote:
<snip>

By the way, how to use STL (vector , for example) to create a
multi-dimension array?

<snip>

Something like this:

//////////////////////////////////////////////////////////////
#include <vector>
#include <iostream>
#include <iterator>

int
main()
{
typedef std::vector< std::vector<int> > table_t;

table_t table;

for (int i = 1; i <= 9; ++i)
{
std::vector<int> row;

for (int j = 1; j <= 9; ++j)
{
row.push_back(i * j);
}

table.push_back(row);
}

int factor1 = 6, factor2 = 8;
std::cout << factor1 << " times " << factor2 << " is "
<< table[factor1 - 1][factor2 - 1]
<< "\n\n";

for (table_t::const_iterator r = table.begin();
r != table.end();
++r)
{
copy(r->begin(), r->end(),
std::ostream_iterator<int>(std::cout, "\t"));
std::cout << '\n';
}

return 0;
}
//////////////////////////////////////////////////////////////

- Adam
--
Reverse domain name to reply.

Jul 19 '05 #7

P: n/a
In article <bx*****************@news.uswest.net>,
Adam Fineman <af******@retupmoc.org> wrote:
[snip]
typedef std::vector< std::vector<int> > table_t;

table_t table;

for (int i = 1; i <= 9; ++i)
{
std::vector<int> row;

for (int j = 1; j <= 9; ++j)
{
row.push_back(i * j);
}

table.push_back(row);
}


Or if you know the number of rows and columns in advance, you can
construct the vector of vectors with that size:

vector<vector<int> > table (numRows, vector<int>(numCols))

then fill it up just like you would an array.

for (int row = 0; row < numRows; ++row)
{
for (col = 0; col < numCols; ++col)
{
table[row][col] = row * col;
}
}

--
Jon Bell <jt*******@presby.edu> Presbyterian College
Dept. of Physics and Computer Science Clinton, South Carolina USA
Jul 19 '05 #8

This discussion thread is closed

Replies have been disabled for this discussion.