2012-02-22 2 views
1

Я получаю cincout и endl в необъявленной ошибки, несмотря на использование #include <iostream>C++ использование соиЬ в методе класса

#include "navigation.h" 
#include <iostream> 
Navigation::Navigation() 
{ 
    xPos=0; 
    yPos=0; 
} 
void Navigation::Move() 
{ 
    //get direction 
    int dir; 
    cout << "Select a direction: " << endl; 
    cout << "1) North 3) South" << endl; 
    cout << "2) East  4) West " << endl; 
    cin >> dir; 
    //move 
    switch(dir) 
    { 
    case 0://north 
     yPos++; 
     break; 
    case 1://east 
     xPos++; 
     break; 
    case 2://south 
     yPos--; 
     break; 
    case 3://west 
     xPos--; 
     break; 
    default: 
     cout << "Invalid entry" << endl; 
    } 
} 

void Navigation::Position(int &x, int &y) 
{ 
    x = xPos; 
    y = yPos; 
} 
+4

префикс их 'std ::' (хороший стиль) или использовать 'using namespace std;' (bad style). – lapk

+0

Попробуйте std :: cout, std :: endl, std :: cin. Или добавьте использование пространства имен std; где-то (после того, как вы включили это хорошее место для него). –

+0

Почему «использование пространства имен» считается плохим? – Yamiko

ответ

13

Они находятся в пространстве имен std. Добавьте эти строки:

using std::cout; 
using std::endl; 
using std::cin; 

С другой стороны, каждый раз, когда вы используете их, называть их по полным именам, например:

std::cout << "Select a direction: " << std::endl;  

Это утомительно очень быстро и может сделать код труднее читать, слишком.

Некоторые люди используют

using namespace std; 

вместо этого, но вы можете получить нежелательные побочные эффекты от этого. Класс, который вы написали, может иметь то же имя, что и другое в пространстве имен std, и ваш чрезмерно широкий оператор использования теперь вызывает столкновение. Вот почему вы никогда не должны указывать using namespace std; в файле заголовка. В файле .cpp это нормально, но я предпочитаю отдельные заявления самостоятельно. Это дает понять, кто читает ваш код, что вы используете из заголовков, которые вы включили.

+0

IMHO упрощает чтение, используя 'std ::' каждый раз. Четко разграничивает стандартные объекты библиотеки от вещей, объявленных в вашем собственном коде. –

4

Они являются членами std имен, так что вам нужно, чтобы квалифицировать их с std: std::endl, std::cout и std::cin.

0

вам нужно объявить using namespace std; [после вашего #include секции] или использовать std::cout, std::cin, std::endl

1

епсИ, CIN и соиЬ находятся в пространстве имен станда. Вам либо нужен using namespace std; в верхней части файла, либо использовать std::endl, std::cin и std::cout.

4

Включить using namespace std; после ваших #include заявлений.

Смежные вопросы