【问题标题】:C++ programing errorC++ 编程错误
【发布时间】:2009-11-21 14:04:56
【问题描述】:

我是 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 有一些严重的缺陷?

如果我将&lt;iostream.h&gt; 更改为&lt;iostream&gt;,我会收到更多错误,如下所示。

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

【问题讨论】:

  • 即使我将 更改为 也会给我一个错误

标签: c++ acc


【解决方案1】:

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

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

>aCC -AA temp.cpp

而且应该永远是

<iostream>  

<iostream.h> 

来自该语言的预标准实现,尽管它通常是为了保持与旧代码的向后兼容性而发布的。

【讨论】:

  • 非常感谢 glen.this 工作。但默认选择哪个版本?
  • 您应该始终致力于使用标准 C++。因此,您应该始终使用 -AA 标志进行编译。 aCC默认为非标准版本是一件很痛苦的事,但也无济于事。需要注意的一件事是,您链接的所有库也必须使用 -AA 标志进行编译,否则您会遇到问题
【解决方案2】:

尝试:

#include <iostream>

代替:

#include <iostream.h>

iostream.h 是一个旧式头文件,其中所有函数都暴露在全局命名空间中。自然在这种情况下, using namespace std 可能不起作用,因为 iostream.h 标头(在此编译器中)可能未公开 std 命名空间。如上所述,尝试使用#include,它是一种新型 C++ 标准库头文件。 (感谢 Shailesh Kumar 的评论!将其包含在答案中)。

【讨论】:

  • iostream.h 是一个旧式头文件,其中所有函数都暴露在全局命名空间中。自然在这种情况下, using namespace std 可能不起作用,因为 iostream.h 标头(在此编译器中)可能未公开 std 命名空间。如上所述,尝试使用 #include 这是一种新的 C++ 标准库头文件。
猜你喜欢
  • 2020-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 2016-07-22
  • 2011-04-13
  • 2016-08-12
  • 2011-02-15
相关资源
最近更新 更多