我是C ++编程的新手。 所以我试着运行一些小程序。 我正在研究HP-UX,它有一个编译器 可执行文件名为 aCC 。
我正在尝试执行一个小程序
#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 :(得分:8)
您使用的是哪个版本的aCC?较旧的版本使用预标准的STL实现,将所有内容放在全局命名空间中(即不使用std命名空间)
编译时可能还需要使用-AA选项。这告诉编译器使用较新的2.x版本的HP STL库。
>aCC -AA temp.cpp
它应该始终是
<iostream>
<iostream.h>
来自该语言的预标准实现,但通常是为了保持与旧代码的向后兼容性而发布。
答案 1 :(得分:1)
尝试:
#include <iostream>
而不是:
#include <iostream.h>
iostream.h 是旧样式标题,其中所有函数都在全局命名空间中公开。在这种情况下,使用命名空间std可能不起作用,因为std命名空间可能不会被iostream.h头文件暴露(在此编译器中)。如上所述,尝试使用#include,这是一种新的C ++标准库头。 (感谢 Shailesh Kumar 的评论!将其包含在答案中)。