LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1317|回复: 9

完全正确的C++源程序在GCC下编译错误

[复制链接]
发表于 2006-4-2 21:43:59 | 显示全部楼层 |阅读模式
源程序为:
#include<iostream>        //4.0.0开始,这个头文件就没有后缀".h"了
void main()
{
int nNum;
cout<<"please input a Hex integer:";
cin>>hex>>nNum;
cout<<"Oct\t"<<oct<<nNum<<endl;    //八进制显示
cout<<"Dec\t"<<dec<<nNum<<endl;  //十进制显示
cout<<"Hex\t"<<hex<<nNum<<endl;   //十六进制显示
}


错误提示为:
main函数应该返回 int 类型
cout在这个作用域不被承认(declared)
oct在这个作用域不被承认(declared)
dec在这个作用域不被承认(declared)
endl在这个作用域不被承认(declared)
cin在这个作用域不被承认(declared)

我的系统为:
fedora core 4 _64
gcc & libc 4.0.0
vim 5.3
iostream存放在 /usr/include/c++/4.0.0/

遇到过同样问题或者明白其中原由的各位,请务必解答!
发表于 2006-4-2 22:32:55 | 显示全部楼层
在标准C++中,标准库都放在std名字空间中了。
用iostream的话
要不引用名字空间std,如使用语句:using namespace std;
        或单独声明空间中的类型、对象,如: using std::cout;

要么在调用cout时用 std::cout代替。

楼主的C++程序对于特定的编译器是正确的。但是不符合标准C++标准而已。
既然楼主使用C++,建议学习一下标准C++,相信会有益处的。
回复 支持 反对

使用道具 举报

发表于 2006-4-2 22:37:19 | 显示全部楼层
晕!楼主,你学C++多久了啊?敢说这是完全正确的C++代码!偶汗!
1.头文件问题,#include <iostream.h> 和 #include <iostream> 是两种风格的代码方式,前者是为了和C代码兼容而存在的!包含了iostream.h ,下面的cin,cout等都类似于声明为全局作用域了!因此不用声明它的名字空间! 而使用 iostream 为头文件, 你要使用cin,cout等,就要声明他们的名字空间先!有两种方法,可以这样 std::cin  ,std::cout , std::endl , 或者直接在你程序中声明要使用的名字空间 usenamespace std; 这样,下面就可直接使用cin,cout等!

Linux下的main程序一般都会返回值,因此你要把main声明返回int就可以了!
回复 支持 反对

使用道具 举报

发表于 2006-4-3 09:11:25 | 显示全部楼层
呵呵,如此完全正确阿
回复 支持 反对

使用道具 举报

发表于 2006-4-3 10:20:59 | 显示全部楼层
汗,什么时代的人?不知道namespace std,甚至还能写出void main()来……连C99现在都只用int main()了。

由此可小窥国内的C++环境是个什么样子……
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-3 10:38:35 | 显示全部楼层
非常感谢楼上MatthewGong 与 leros_H 的解答,对于我的肤浅实在感到汗颜。再次感谢二位!这个问题困饶了我很久,一直找不到根结,所以脑子发热的可以!
谢谢!
回复 支持 反对

使用道具 举报

发表于 2006-4-3 12:13:54 | 显示全部楼层
我们学校教的C++也是用和楼主几乎相同的格式,只是用iostream.h代替iostream
用了中国人的教材(本质上说是小册子)。7个星期28学时结业。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-3 18:04:21 | 显示全部楼层
非常感谢各位网友的指导和关注,现在问题已经得到解决.根据个人的习惯,现总结于下:

ANSI C++在C++标准库中定义了新的规则,如要使用标准库里的名字,如cout,不能在程序中直接使用,而需要在预处理指示符
#include<iostream>后加入
using namespace std; //这里std是standard(标准)的缩写。或者还可以变通成以下格式:
using std::cout  //这一行适用于标准名引用较少的情况
std::cout //这一行可以直接写在语句里面

最后在linux里面,C语言对应于GCC编译器,而C++则应该对应于G++编译器,两者使用格式大同小异。
回复 支持 反对

使用道具 举报

发表于 2006-4-7 16:24:13 | 显示全部楼层
时光倒退到1990年之前,这段代码完全正确。但现在是2006年了。
回复 支持 反对

使用道具 举报

发表于 2006-4-7 16:24:18 | 显示全部楼层
时光倒退到1990年之前,这段代码完全正确。但现在是2006年了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表