Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Using constant variables in header file

Reply
Thread Tools

Using constant variables in header file

 
 
Karen
Guest
Posts: n/a
 
      11-12-2003
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];








 
Reply With Quote
 
 
 
 
Victor Bazarov
Guest
Posts: n/a
 
      11-12-2003
"Karen" <(E-Mail Removed)> 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


 
Reply With Quote
 
 
 
 
Victor Bazarov
Guest
Posts: n/a
 
      11-12-2003
"Karen" <(E-Mail Removed)> 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


 
Reply With Quote
 
Simon Elliott
Guest
Posts: n/a
 
      11-12-2003
Karen <(E-Mail Removed)> 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/






 
Reply With Quote
 
Victor Bazarov
Guest
Posts: n/a
 
      11-12-2003
"Simon Elliott" <(E-Mail Removed)> wrote...
> Karen <(E-Mail Removed)> 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


 
Reply With Quote
 
Adam Fineman
Guest
Posts: n/a
 
      11-12-2003
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.

 
Reply With Quote
 
Adam Fineman
Guest
Posts: n/a
 
      11-12-2003
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:stream_iterator<int>(std::cout, "\t"));
std::cout << '\n';
}

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

- Adam
--
Reverse domain name to reply.

 
Reply With Quote
 
Jon Bell
Guest
Posts: n/a
 
      11-13-2003
In article <bxusb.622$(E-Mail Removed)>,
Adam Fineman <(E-Mail Removed)> 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 <(E-Mail Removed)> Presbyterian College
Dept. of Physics and Computer Science Clinton, South Carolina USA
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Can I put constant string arrays in a header file Tobias Blass C Programming 22 04-09-2011 07:46 PM
Header files with "header.h" or <header.h> ?? mlt C++ 2 01-31-2009 02:54 PM
concatenate a constant to constant string using macros sinbad C Programming 7 06-19-2008 05:28 PM
What is better /standard for creating files. a cpp file with header or cpp and seperate file for header DrUg13 C++ 1 02-10-2004 09:20 AM
how to avoid using another header file inside a header file? Newsgroup - Ann C++ 4 11-02-2003 01:20 PM



Advertisments