LinuxSir.cn,穿越时空的Linuxsir!

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

初次在linux编译C++程序,遇到问题请大家帮忙

[复制链接]
发表于 2004-12-28 21:40:21 | 显示全部楼层 |阅读模式
我在win下有VC编写一C++程序text.cpp并可以正常运行,如下:
#include<iostream.h>
void main()
{
        long m;
        cin>>m;
        for(int i=2;i<m;i++)
                if(m%i==0)
                        break;
        if(m==i)
                cout<<"true\n";
        else
                cout<<"false\n";
}


但在linux下用gcc -o text text.cpp编译时,怎么有这样的提示:
text.cpp:3: `main' must return `int'
text.cpp: In function `int main(...)':
text.cpp:9: name lookup of `i' changed for new ISO `for' scoping
text.cpp:6:   using obsolete binding at `i'
不知道这是什么原因
谢谢
发表于 2004-12-28 21:53:09 | 显示全部楼层
有几个问题
iostream是c++里的,编译要用g++
#include<iostream.h>
不是标准c++的写法,应该用
  1. #include<iostream>
  2. using namespace std;
复制代码
 楼主| 发表于 2004-12-28 22:34:50 | 显示全部楼层
是改成这样吗?
#include<iostream>
using namespace std;
void main()
{
        long m;
        cin>>m;
        for(int i=2;i<m;i++)
                if(m%i==0)
                        break;
        if(m==i)
                cout<<"true\n";
        else
                cout<<"false\n";
}
g++怎么用?
还是这样++ -o text text.cpp
吗?
但是还是有错啊
text.cpp:4: `main' must return `int'
text.cpp: In function `int main(...)':
text.cpp:10: name lookup of `i' changed for new ISO `for' scoping
text.cpp:7:   using obsolete binding at `i'
发表于 2004-12-28 23:10:35 | 显示全部楼层
编译器提示:text.cpp:3: `main' must return `int'
意思是说main函数的返回值是int格式,所以你的主程序应该是int main(){...;...;return 0;}
记得最后的地方加上return 0;哦,不然编译器又要报错了。

建议搂主用标准的C++规范,现在C++的编写格式太多太杂,找到一本好的教材很重要噢。
发表于 2004-12-29 13:09:03 | 显示全部楼层
楼上的正解
发表于 2004-12-29 22:10:33 | 显示全部楼层
Post by yytoday
我在win下有VC编写一C++程序text.cpp并可以正常运行,如下:
#include<iostream.h>
void main()
{
        long m;
        cin>>m;
        for(int i=2;i<m;i++)
                if(m%i==0)
                        break;
        if(m==i)
                cout<<"true\n";
        else
                cout<<"false\n";
}


但在linux下用gcc -o text text.cpp编译时,怎么有这样的提示:
text.cpp:3: `main' must return `int'
text.cpp: In function `int main(...)':
text.cpp:9: name lookup of `i' changed for new ISO `for' scoping
text.cpp:6:   using obsolete binding at `i'
不知道这是什么原因
谢谢


1. void main() 不是标准的 main 函数原型。标准的原型之一是:
    int main(void);

2. 按照标准的定义,for 循环变量的生命周期只及于 for 循环内部,就如同在
    for 循环大括号块内定义的变量一样,所以变量 i 在 for 循环之后就不能使用
    了。
 楼主| 发表于 2004-12-30 14:37:44 | 显示全部楼层
谢谢各位 :thank  :thank
是不是在Linux下对c++书写要求要严谨得多呢 :ask
这段程序在windows下就可以运行的
发表于 2004-12-30 15:10:15 | 显示全部楼层
Post by yytoday
谢谢各位 :thank  :thank
是不是在Linux下对c++书写要求要严谨得多呢 :ask
这段程序在windows下就可以运行的



谈不上严谨,只是不同的编译器对程序的书写要求略微有些差别
发表于 2004-12-30 16:25:51 | 显示全部楼层
Post by yytoday
谢谢各位 :thank  :thank
是不是在Linux下对c++书写要求要严谨得多呢 :ask
这段程序在windows下就可以运行的

不是linux和windows而是编译器的问题,vc6里面可以用那种非标准的写法。
 楼主| 发表于 2004-12-30 20:02:14 | 显示全部楼层
:2cool  :2cool  :2cool
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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