470,849 Members | 1,074 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 470,849 developers. It's quick & easy.

declare a struct with c++ vectors in a header file...

Hi all,

I tried to declare a c++ struct like following in a header file:

------
1 #ifndef _SEARCHDATA_H_
2 #define _SEARCHDATA_H_
3
4 #include <vector>
5 #include <list>
6
7 typedef struct searchIterInfo searchIter;
8 struct searchIterInfo {
9 searchIterInfo ():
10 contPts(0), //continuous trial points
11 contFvs(0), //fv for cont points
12 contFerrors(0), //std errors for cont points
13 gradients(0), //list of gradients
14 intPts(0), //evaluated int points
15 intFvs(0), //function values for int points
16 intFerrors(0), //errors for int points
17 intPtList(0), //the monotone list of points
18 simList(0), //the simplex list
19 seedVals(0), //the seed values
20 hMtx(0) {}; //the estimated hesian matrix
21
22 vector< vector<double contPts;
23 vector<double contFvs;
24 vector<double contFerrors;
25 vector< vector<double gradients;
26 vector< vector<int intPts;
27 vector<double intFvs;
28 vector<double intFerrors;
29 list<int intPtList;
30 list<int simList;
31 vector<double seedVals;
32 vector< vector<double hMtx;
33 int iterID; //the sample path index
34 double sampleSize; //the sample size for this sp
35 };
36 #endif
-----------------

I got compiler errors:

g++ -Wall -g -c retroSearch.cpp
In file included from retroSearch.cpp:3:
searchData.h:22: error: ISO C++ forbids declaration of `vector' with
no type
searchData.h:22: error: expected `;' before '<' token
searchData.h:23: error: ISO C++ forbids declaration of `vector' with
no type
searchData.h:23: error: expected `;' before '<' token
searchData.h:24: error: ISO C++ forbids declaration of `vector' with
no type
searchData.h:24: error: expected `;' before '<' token
searchData.h:25: error: ISO C++ forbids declaration of `vector' with
no type
searchData.h:25: error: expected `;' before '<' token
searchData.h:26: error: ISO C++ forbids declaration of `vector' with
no type
searchData.h:26: error: expected `;' before '<' token
searchData.h:27: error: ISO C++ forbids declaration of `vector' with
no type
searchData.h:27: error: expected `;' before '<' token
searchData.h:28: error: ISO C++ forbids declaration of `vector' with
no type
searchData.h:28: error: expected `;' before '<' token
searchData.h:29: error: ISO C++ forbids declaration of `list' with no
type
searchData.h:29: error: expected `;' before '<' token
searchData.h:30: error: ISO C++ forbids declaration of `list' with no
type
searchData.h:30: error: expected `;' before '<' token
searchData.h:31: error: ISO C++ forbids declaration of `vector' with
no type
searchData.h:31: error: expected `;' before '<' token
searchData.h:32: error: ISO C++ forbids declaration of `vector' with
no type
searchData.h:32: error: expected `;' before '<' token
searchData.h: In constructor `searchIterInfo::searchIterInfo()':
searchData.h:10: error: class `searchIterInfo' does not have any field
named `contPts'
searchData.h:11: error: class `searchIterInfo' does not have any field
named `contFvs'
searchData.h:12: error: class `searchIterInfo' does not have any field
named `contFerrors'
searchData.h:13: error: class `searchIterInfo' does not have any field
named `gradients'
searchData.h:14: error: class `searchIterInfo' does not have any field
named `intPts'
searchData.h:15: error: class `searchIterInfo' does not have any field
named `intFvs'
searchData.h:16: error: class `searchIterInfo' does not have any field
named `intFerrors'
searchData.h:17: error: class `searchIterInfo' does not have any field
named `intPtList'
searchData.h:18: error: class `searchIterInfo' does not have any field
named `simList'
searchData.h:19: error: class `searchIterInfo' does not have any field
named `seedVals'
searchData.h:20: error: class `searchIterInfo' does not have any field
named `hMtx'
searchData.h: At global scope:
searchData.h:36: error: expected constructor, destructor, or type
conversion before '<' token
searchData.h:37: error: `vector' was not declared in this scope
searchData.h:37: error: expected primary-expression before "int"
searchData.h:37: error: expected primary-expression before '&' token
searchData.h:37: error: expected primary-expression before ',' token
searchData.h:37: error: expected primary-expression before "double"
searchData.h:37: error: expected primary-expression before "double"
searchData.h:37: error: initializer expression list treated as
compound expression
searchData.h:38: error: variable or field `addPt' declared void
searchData.h:38: error: `vector' was not declared in this scope
searchData.h:38: error: expected primary-expression before "int"
searchData.h:38: error: expected primary-expression before '&' token
searchData.h:38: error: expected primary-expression before ',' token
searchData.h:38: error: expected primary-expression before "double"
searchData.h:38: error: expected primary-expression before "double"
searchData.h:38: error: initializer expression list treated as
compound express

****************

I am a beginer of c++ programming, so anyone pls help me. Thanks a
lot.

Beet

#endif
Jun 27 '08 #1
2 4705
* * * 1 #ifndef _SEARCHDATA_H_
* * * 2 #define _SEARCHDATA_H_
Names cannot begin with an underscore and a Capital letter (they are
reserved by the implementation)
* * * 7 typedef struct searchIterInfo searchIter;
I suspect this is a C-ism, and is not something you need in C++ code.
* * * 8 struct searchIterInfo {
* * * 9 * * searchIterInfo ():
* * *10 * * contPts(0), * * * //continuous trial points>
There's no need to zero initialize std::vector types here...

Joe Cook
Jun 27 '08 #2

"beet" <wh****@gmail.coma écrit dans le message de news:
e3**********************************...oglegroups.com...
Hi all,

I tried to declare a c++ struct like following in a header file:

------
1 #ifndef _SEARCHDATA_H_
2 #define _SEARCHDATA_H_
3
4 #include <vector>
5 #include <list>
6
add :
using namespace std;

or you gonna have to be type 'std::vector' instead of just 'vector'.
vector (list too) is a class inside the namespace std.

7 typedef struct searchIterInfo searchIter;
Looks like C style programming here (line 7) and by the way you are not
using searchIter
8 struct searchIterInfo {
9 searchIterInfo ():
10 contPts(0), //continuous trial points
11 contFvs(0), //fv for cont points
12 contFerrors(0), //std errors for cont points
13 gradients(0), //list of gradients
14 intPts(0), //evaluated int points
15 intFvs(0), //function values for int points
16 intFerrors(0), //errors for int points
17 intPtList(0), //the monotone list of points
18 simList(0), //the simplex list
19 seedVals(0), //the seed values
20 hMtx(0) {}; //the estimated hesian matrix
21
why are you doing something like contPts(0). This actually calls the
constructor of vector with 0 as a parameter.
So after that your vector has size 0... useless
22 vector< vector<double contPts;
when I have a line like that, I usually do:

typedef vector<doubleVecDouble;
vector<VecDoublecontPtrs;

That way you avoid the >problem
23 vector<double contFvs;
24 vector<double contFerrors;
25 vector< vector<double gradients;
26 vector< vector<int intPts;
27 vector<double intFvs;
28 vector<double intFerrors;
29 list<int intPtList;
30 list<int simList;
31 vector<double seedVals;
32 vector< vector<double hMtx;
33 int iterID; //the sample path index
34 double sampleSize; //the sample size for this sp
35 };
36 #endif
-----------------


Jun 27 '08 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by CViniciusM | last post: by
15 posts views Thread by Geoff Cox | last post: by
4 posts views Thread by yuliy | last post: by
8 posts views Thread by redefined.horizons | last post: by
20 posts views Thread by Binary | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.