2009-11-21 89 views
1

我是C++编程新手。 所以我想我的运气执行一些小程序。 我正在编写HP-UX,它有一个编译器,它的 可执行文件名为aCCC++编程错误

我想要当我编译这个执行的小程序

#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; 
        ^^^ 

到底是什么问题? 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 2009-11-21 14:07:20

回答

8

您正在使用哪个版本的aCC?旧版本使用标准STL实现,将所有内容放入全局名称空间(即不使用std名称空间)

编译时可能还需要使用-AA选项。这告诉编译器使用HP的STL库的更新的2.x版本。

>aCC -AA temp.cpp 

它应该永远是

<iostream> 

<iostream.h> 

是从预标准实现的语言,虽然它通常都是以保持与旧代码的向后兼容性。

+0

非常感谢glen.this working.but默认选择哪个版本? – Vijay 2009-11-21 14:18:54

+2

您应该始终致力于使用标准C++。所以你应该总是用-AA标志编译。 aCC默认为非标准版本是件痛苦的事情,但它无法帮助。有一点需要注意,所链接的所有库也必须使用-AA标志进行编译,否则将遇到问题 – Glen 2009-11-21 14:21:04

+0

这是非常有用的信息。 – Vijay 2009-11-21 14:22:46

1

尝试用:

#include <iostream> 

相反的:

#include <iostream.h> 

iostream.h是老式风格的头部,其所有功能都在全局命名空间中暴露出来。自然地,在这种情况下,使用namespace std可能不起作用,因为std命名空间可能不会被iostream.h头文件(在此编译器中)公开。如上所述,使用#include这是一种新风格的C++标准库头文件。 (谢谢Shailesh库马尔的评论!包括在答案)。

+0

iostream.h是一种旧式头,其中所有功能都暴露在全局命名空间。自然地,在这种情况下,使用namespace std可能不起作用,因为std命名空间可能不会被iostream.h头文件(在此编译器中)公开。 如上所述,请使用#include ,这是一种新风格的C++标准库头文件。 – 2009-11-21 14:14:22