Test Test
Test Test

Reputation: 2889

g++ cannot find header file

I am migrating from Java to C++. It seems that C++ makes classes declaration in separate files, difficult. So I need your help,

in my main.cpp:

#include "Sphere.h"

using namespace std;
.....
...
..

int main( void ) {
   Sphere *earth = new Sphere(sphere_start ,sphere_end);
...
..
.

in my Sphere.h

class Sphere
{

    public:
        Sphere(int,int);

}

and in my Sphere.cpp

#include "Sphere.h"

using namespace std;

int sphere_start, sphere_end;   

Sphere::Sphere (int a, int b)
{
    sphere_start = a;
    sphere_end = b;
}

void Sphere::render(int i) 
{
   ....
   ..
   .

}

This is the very basic code that I think causes the following error:

main.cpp:14:20: fatal error: Sphere.h: No such file or directory
compilation terminated.

why?

Upvotes: 4

Views: 34007

Answers (4)

stefanB
stefanB

Reputation: 79780

You need to add to your compile command a path to where the header files can be found.

If your header is in the headers directory add -Iheaders:

g++ -o main.o -c -Iheaders main.cpp
g++ -o sphere.o -c -Iheaders sphere.cpp
g++ -o app main.o sphere.o -L.

Or whatever your files are ...

Upvotes: 6

You should post your command line, but my guess is that you should tell the path to the header files to the compiler. If you're using linux try this:

g++ main.cpp shpere.cpp -I<path_to_Sphere.h> -o main

Upvotes: 2

01d55
01d55

Reputation: 1912

Sphere.h must either be in the same directory as each file that includes it, or the compiler must be directed to search the directory in which Sphere.h is located.

Upvotes: 4

Laserallan
Laserallan

Reputation: 11312

Two potential errors:

  • Is Sphere.h in the same directory as main.cpp?
  • Is Sphere.h named Sphere.h and not sphere.h?

Upvotes: 1

Related Questions