4

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?

Test Test
  • 2,831
  • 8
  • 44
  • 64

4 Answers4

6

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 ...

stefanB
  • 77,323
  • 27
  • 116
  • 141
4

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.

01d55
  • 1,872
  • 13
  • 22
  • 3
    all the file are in the same directory – Test Test Jan 05 '12 at 00:38
  • How one could "debug" this problem, when it is clear that all header files are in place, all necessary dev-packages installed and the source file refer to the correct header path, but the compiler still fails to find the header file. – Adam L. S. Jan 10 '14 at 20:28
  • @AdamL.S. If a compiler fails to find a header file that exists in a known path, the probable cause is failure to specify the root of the path in the compiler invocation. Conventionally, the option is -I. e.g. if header foo.h exists in /usr/include, #include will fail unless either the option -I/usr/ is used, or the compiler is invoked in /usr/. – 01d55 Feb 20 '14 at 20:10
2

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
1

Two potential errors:

  • Is Sphere.h in the same directory as main.cpp?
  • Is Sphere.h named Sphere.h and not sphere.h?
Laserallan
  • 11,072
  • 10
  • 46
  • 67