2009-11-21 4 views
1

Я новичок в программировании на С ++. Так что я пытался, чтобы моя удача выполняла некоторые небольшие программы. Я работаю над HP-UX, у которого есть компилятор, чей исполняется такз aCC.Ошибка программирования на C++

Я пытаюсь выполнить небольшую программу

#include <iostream.h> 
using namespace std; 
class myclass { 
public: 
    int i, j, k; 
}; 

int main() 
{ 
    myclass a, b; 
    a.i = 100; 
    a.j = 4; 
    a.k = a.i * a.j; 
    b.k = 12; 
    cout << a.k << " " << b.k; 
    return 0; 
} 

Когда я компилирую это дает мне ошибку:

> aCC temp.cpp 
Error 697: "temp.cpp", line 2 # Only namespace names are valid here. 
    using namespace std; 
        ^^^ 

Что именно проблема? Is std не рассматривается как пространство имен в компиляторе aCC или существует какой-то серьезный недостаток с aCC?

Если я изменяю <iostream.h> на <iostream>, я получаю еще несколько ошибок, как показано ниже.

>aCC temp.cpp 
Error 112: "temp.cpp", line 1 # Include file <iostream> not found. 
    #include <iostream> 
      ^^^^^^^^^^ 
Error 697: "temp.cpp", line 2 # Only namespace names are valid here. 
    using namespace std; 
        ^^^ 
Error 172: "temp.cpp", line 14 # Undeclared variable 'cout'. 
    cout << a.k << " " << b.k; 
+0

даже если я chnage до его дает мне ошибку – Vijay

ответ

8

Какую версию aCC вы используете? В старых версиях использовалась предварительная стандартная реализация STL, которая помещала все в глобальное пространство имен (т. Е. Не использовала пространство имен std).

Возможно, вам понадобится использовать параметр -AA при компиляции. Это говорит компилятору использовать более новую версию библиотеки STL HP. 2.x.

>aCC -AA temp.cpp 

И это всегда должно быть

<iostream> 

<iostream.h> 

от предварительно стандартной реализации языка, хотя это, как правило, поставляется таким образом, чтобы обеспечить обратную совместимость с более старым кодом.

+0

Большое спасибо glen.this work.but по умолчанию какая версия выбрана? – Vijay

+2

Вы должны постоянно использовать стандартный C++. Поэтому вы всегда должны компилироваться с флагом -AA. Это боль, которую ACC по умолчанию использует для нестандартной версии, но это не может помочь. Одна вещь, о которой нужно знать, все библиотеки, на которые вы ссылаетесь, также должны быть скомпилированы с флагом -AA, или вы столкнетесь с проблемами – Glen

+0

, это очень полезная информация. :) спасибо – Vijay

1

Попробуйте с:

#include <iostream> 

Вместо:

#include <iostream.h> 

iostream.h старый заголовок стиль, в котором все функции подвергаются в глобальном пространстве имен. естественно, в таком случае использование пространства имен std может не работать, поскольку пространство имен std, вероятно, не отображается заголовком iostream.h (в этом компиляторе). Как объяснялось выше, попробуйте с # include, который является новым стандартным заголовком библиотеки стиля C++. (спасибо Shailesh Kumar для комментария! включил его в ответ).

+0

iostream.h - это старый заголовок стиля, в котором все функции отображаются в глобальном пространстве имен. естественно, в таком случае использование пространства имен std может не работать, поскольку пространство имен std, вероятно, не отображается заголовком iostream.h (в этом компиляторе). Как объяснялось выше, попробуйте с # include , который является новым стандартным заголовком библиотеки стандарта C++. –