259

I'm practicing using mulitple files and header files etc. So I have this project which takes two numbers and then adds them. Pretty simple.

Here are my files:

main.cpp

#include <iostream>
#include "add.h"

int main()
{
    int x = readNumber();
    int y = readNumber();

    writeAnswer(x + y);

    return(0);
}

io.cpp

int readNumber()
{
    int x;

    std::cout << "Number: ";
    std::cin >> x;

    return x;
}

void writeAnswer(int x)
{
    std::cout << "Answer: ";
    std::cout << x;
}

add.h

#ifndef ADD_H_INCLUDED
#define ADD_H_INCLUDED

int readNumber();
void writeAnswer(int x);

#endif // #ifndef ADD_H_INCLUDED

The error is showing up in io.cpp. The exact errors are:

enter image description here

Does anyone have any idea why this may be happening? Thanks.

EDIT: I made a small project yesterday with the same amount of files (2 .cpp and 1.h) and I didn't include the iostream header in the other .cpp and it still compiled and ran fine.

Ernestas Gruodis
  • 8,567
  • 14
  • 55
  • 117
Paul Hannon
  • 2,613
  • 2
  • 13
  • 5
  • 4
    Re your edit: then you compiled that project differently. Including iostream in your second cpp file is **required** as you have it here. Maybe you had that include in the `.h` file last time around. – Mat Jul 07 '12 at 14:58
  • Yeah, it's working great now, thanks for the quick responses everyone! :) – Paul Hannon Jul 07 '12 at 15:01
  • 2
    always include system header files after your local files. – Vincent Jun 06 '17 at 13:42

3 Answers3

426

add #include <iostream> to the start of io.cpp too.

unkulunkulu
  • 11,576
  • 2
  • 31
  • 49
26

If you're using pre-compiled headers with Microsoft's compiler (MSVC), remember that it must be:

#include "stdafx.h"
#include <iostream>

and not the other way around:

#include <iostream>
#include "stdafx.h"

In other words, the pre-compiled header include file must always come first. (The compiler should give you an error specifically explaining this if you forget.)

Cody Gray - on strike
  • 239,200
  • 50
  • 490
  • 574
Jukes
  • 407
  • 4
  • 5
1

I had a similar issue and it turned out that i had to add an extra entry in cmake to include the files.

Since i was also using the zmq library I had to add this to the included libraries as well.