f



Compilation error with seperate compilation

Can anyone help me with the following problem
When i compile a program which is devided in three files and i compile
with GCC i'm getting the follwong error
However when i put it in one file it conpiles and runs perfectly
So it has probaly something to do with the includes , but i do not see
what
Many regards
Nico Heiligers

**** Build of configuration Debug for project acc ****
**** Internal Builder is used for build ****
g++ -O0 -g3 -Wall -c -fmessage-length=0 -oreadadfile.o ..
\readadfile.cpp
In file included from ..\readadfile.cpp:1:
...\adfile.h:12: error: ISO C++ forbids declaration of `vector' with no
type
...\adfile.h:12: error: expected `;' before '<' token
...\adfile.h:14: error: `string' does not name a type
...\readadfile.cpp:5: error: expected initializer before "Adfile"
...\readadfile.cpp:6: error: expected constructor, destructor, or type
conversion before '.' token
...\readadfile.cpp:7: error: expected constructor, destructor, or type
conversion before '.' token
...\readadfile.cpp:8: error: expected declaration before '}' token
Build error occurred, build is stopped
Time consumed: 172 ms.

these are the files
h file for class decalration adfile.h
#ifndef ADFILE_H_
#define ADFILE_H_

class Adfile
{
public:
Adfile(char*);
~Adfile();
void readFile(void);
void displayFile(void) const;
private:
vector<string> v;
char* filename;
string line;
};
#endif /*ADFILE_H_*/

the compiler is marking an error at lines

 vector<string> v;
and
string line

===============================

implementation cpp file: adfile.cpp
#include "adfile.h"
#include <string>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;


Adfile::Adfile(char* str)
{
filename = str;
}
Adfile::~Adfile()
{
}

void Adfile::readFile(void)
{
ifstream in(filename);
while(getline(in, line))
v.push_back(line);
}

void Adfile::displayFile(void) const
{
for(unsigned int i = 0; i < v.size(); i++)
cout << i << ": " << v[i] << endl;
}

main program file:
#include "adfile.h"

int main(void)
{
Adfile adfile("Fillvector.cpp");
adfile.readFile();
adfile.displayFile();
} ///:~

==========================================
0
2/15/2008 11:30:04 AM
comp.lang.c++ 49423 articles. 7 followers. Post Follow

4 Replies
894 Views

Similar Articles

[PageSpeed] 48

On Feb 15, 11:30 am, C__chp <nheilig...@chello.nl> wrote:
> the compiler is marking an error at lines
>
>  vector<string> v;
> and
> string line
>
> ===============================
>
> implementation cpp file: adfile.cpp
> #include "adfile.h"
> #include <string>
> #include <iostream>
> #include <fstream>
> #include <vector>
> using namespace std;
>

You aren't including the headers for the stl vector and string in the
class's header, so it doesn't understand what a vector<string> is

0
2/15/2008 11:57:34 AM
Keith Halligan wrote:
> On Feb 15, 11:30 am, C__chp <nheilig...@chello.nl> wrote:
>> the compiler is marking an error at lines
>>
>>  vector<string> v;
>> and
>> string line
>>
>> ===============================
>>
>> implementation cpp file: adfile.cpp
>> #include "adfile.h"
>> #include <string>
>> #include <iostream>
>> #include <fstream>
>> #include <vector>
>> using namespace std;
>>
> 
> You aren't including the headers for the stl vector and string in the
> class's header, so it doesn't understand what a vector<string> is

And the solution is .....

move #include "adfile.h" 5 lines down, after #include <vector>

Ko vd Sloot

0
2/15/2008 1:07:30 PM
In message <e85e2$47b58e93$89382996$13657@news2.tudelft.nl>, Ko van der 
Sloot <Ko.vanderSloot@uvt.nl> writes
>Keith Halligan wrote:
>> On Feb 15, 11:30 am, C__chp <nheilig...@chello.nl> wrote:
>>> the compiler is marking an error at lines
>>>
>>>  vector<string> v;
>>> and
>>> string line
>>>
>>> ===============================
>>>
>>> implementation cpp file: adfile.cpp
>>> #include "adfile.h"
>>> #include <string>
>>> #include <iostream>
>>> #include <fstream>
>>> #include <vector>
>>> using namespace std;
>>>
>>
>> You aren't including the headers for the stl vector and string in the
>> class's header, so it doesn't understand what a vector<string> is
>
>And the solution is .....
>
>move #include "adfile.h" 5 lines down, after #include <vector>

No, it's to put both "#include <vector>" and "#include <string>" 
*inside* adfile.h, and to prefix all occurrences of "vector" and 
"string" in that file with std:: .

Since adfile.h refers to both "vector" and "string" it's only courtesy 
to the reader (and the compiler ;-) to explain what they are supposed to 
mean. Relying on the user to include headers in a particular order is 
not a robust solution.

-- 
Richard Herring
0
Richard
2/15/2008 1:45:27 PM
On Feb 15, 8:07=A0am, Ko van der Sloot <Ko.vanderSl...@uvt.nl> wrote:
[snips]
> And the solution is .....
>
> move #include "adfile.h" 5 lines down, after #include <vector>

Someplace I read that you want the first line of a class
implementation file to be the #include of the header file
for that class. This is a rule that has worked for me.

So, as Richard Herring suggests, I'd put the #include for
the STL stuff in the header file for a class that uses them.
Socks
0
puppet_sock (479)
2/15/2008 3:57:38 PM
Reply: