cout nie jest członkiem std

199

Ćwiczę wiele plików i plików nagłówkowych itp. Mam więc ten projekt, który bierze dwie liczby, a następnie dodaje je. Dość proste.

Oto moje pliki:

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

Błąd pojawia się w pliku io.cpp. Dokładne błędy to:

wprowadź opis zdjęcia tutaj

Czy ktoś ma pojęcie, dlaczego tak się dzieje? Dzięki.

EDYCJA: Wczoraj stworzyłem mały projekt z taką samą ilością plików (2 .cpp i 1.h) i nie włączyłem nagłówka iostream w innym .cpp i nadal kompiluje się i działa dobrze.

Paul Hannon
źródło
3
Ponownie edytuj: następnie skompilowałeś ten projekt inaczej. Dołączenie iostream do drugiego pliku CPP jest wymagane, ponieważ masz go tutaj. Być może miałeś to w .hpliku ostatnio.
Mat.
Tak, teraz działa świetnie, dziękuję wszystkim za szybkie odpowiedzi! :)
Paul Hannon,
2
zawsze dołączaj pliki nagłówków systemowych po plikach lokalnych.
Vincent

Odpowiedzi:

317

dodaj #include <iostream>też na początek io.cpp.

unkulunkulu
źródło
5
iostream musi zostać dołączony (bezpośrednio lub pośrednio). W przeciwnym razie, skąd kompilator wiedziałby, gdzie znaleźć std :: cout.
AK
1
Rozumiem co mówisz. Dzięki. Chociaż jak zdobyłem drugiego proj. pracować bez włączania go również w innym .cpp? Zaktualizowałem OP na dole.
Paul Hannon
1
Prawdopodobnie uwzględniłeś to pośrednio. Jest to ZAWSZE wymagane.
Sebastian Hoffmann
2
Musiałem również dołączyć go do pliku .h !! Dzięki
użytkownik391339,
3
również należy go uwzględnić po stdafx.h, a nie wcześniej
Alex
16

Pamiętaj również, że musi to być:

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

i nie na odwrót

#include <iostream>
#include "stdafx.h"
Jukes
źródło
1
Skąd "stdafx.h"pochodzi? OP nie używa takich nagłówków
KABoissonneault,
Miałem ten sam błąd i starałem się wymienić ich miejsca, żeby były OK.
Ali Ahmadvand
1

Miałem podobny problem i okazało się, że musiałem dodać dodatkowy wpis, cmakeaby dołączyć pliki.

Ponieważ korzystałem również z biblioteki zmq, musiałem to również dodać do dołączonych bibliotek.

Marco Rubio
źródło