Compilation error with seperate compilation

C

C__chp

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 << endl;
}

main program file:
#include "adfile.h"

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

==========================================
 
K

Keith Halligan

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
 
K

Ko van der Sloot

Keith said:
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
 
R

Richard Herring

Ko van der said:
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.
 
P

Puppet_Sock

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,731
Messages
2,569,432
Members
44,834
Latest member
BuyCannaLabsCBD

Latest Threads

Top