Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Compilation error with seperate compilation

Reply
Thread Tools

Compilation error with seperate compilation

 
 
C__chp
Guest
Posts: n/a
 
      02-15-2008
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();
} ///:~

==========================================
 
Reply With Quote
 
 
 
 
Keith Halligan
Guest
Posts: n/a
 
      02-15-2008
On Feb 15, 11:30 am, C__chp <(E-Mail Removed)> 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

 
Reply With Quote
 
 
 
 
Ko van der Sloot
Guest
Posts: n/a
 
      02-15-2008
Keith Halligan wrote:
> On Feb 15, 11:30 am, C__chp <(E-Mail Removed)> 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

 
Reply With Quote
 
Richard Herring
Guest
Posts: n/a
 
      02-15-2008
In message <e85e2$47b58e93$89382996$(E-Mail Removed)> , Ko van der
Sloot <(E-Mail Removed)> writes
>Keith Halligan wrote:
>> On Feb 15, 11:30 am, C__chp <(E-Mail Removed)> 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
 
Reply With Quote
 
Puppet_Sock
Guest
Posts: n/a
 
      02-15-2008
On Feb 15, 8:07*am, Ko van der Sloot <(E-Mail Removed)> 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
 
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
Is load testing a web service with seperate threads from one machinethe same as a single thread from seperate machines? ses Java 5 03-29-2011 03:36 PM
Seperate validation for seperate user controls on same page moondaddy ASP .Net 2 10-16-2006 04:03 AM
2 seperate wireless networks in same building SpiritBoy Wireless Networking 0 02-23-2005 08:13 PM
2 seperate wireless networks in same building SpiritBoy Wireless Networking 0 02-23-2005 08:12 PM
Seperate compilation (header files n' their implementations) Chris Mantoulidis C++ 3 12-20-2003 04:25 AM



Advertisments