一段c++程序win下正常ununtu上编译报错,求指教!!

周耀1994 发布于 2013/05/07 20:53
阅读 1K+
收藏 0

有一段代码在windows下编译运行正常   但在ubuntu上却出现了错误 小生百思不得其解!!求大神指教!!



//******************************************

//
//静态函数的调用     C++语言实现
//
//
//
//******************************************
#include<iostream>
#include<string>
using namespace std;
class student{
    public:
        student(char *name1,char *stu_no1,float score1);
        ~student();
        void show();
        void show_count_sum_ave();
    private:
        char *name;
        char* stu_no;
        float score;
        static int count;
        static float sum;
        static float ave;
};
student::student(char *name1,char *stu_no1,float score1)
{
    name=new char[strlen(name1)+1];           //显示strlen作用域有问题
        strcpy(name,name1);
        stu_no=new char[strlen(stu_no1)+1];
    strcpy(stu_no,stu_no1);
    score=score1;
    ++count;
    sum=sum+score;
    ave=sum/count;
}

student::~student()
{
    delete []name;
    delete []stu_no;
    --count;
    sum=sum-score;
}

void student::show()
{
    cout<<"\n\n\n name:"<<name<<endl;
    cout<<"number:"<<stu_no<<endl;
    cout<<"ave"<<score<<endl;
}
void student::show_count_sum_ave()
{
   cout<<"\n all student number"<<count;
   cout<<"\n the average number"<<ave;
}
int student::count=0;
float student::sum=0.0;
float student::ave=0.0;
int main()
{
    student stu1("lim ming","08150201",90);
    stu1.show();
    stu1.show_count_sum_ave();
    cout<<"\n\n--------------------------\n\n";
    student stu2("zhang da wei","09150201",80);
    stu2.show();
    stu2.show_count_sum_ave();
    return 0;

}



zhouyao@ThinkPad-Edge-E530:~$ g++ 5.7a.cpp


5.7a.cpp: 在构造函数‘student::student(char*, char*, float)’中:
5.7a.cpp:27:28: 错误: ‘strlen’在此作用域中尚未声明
5.7a.cpp:28:26: 错误: ‘strcpy’在此作用域中尚未声明
5.7a.cpp: 在函数‘int main()’中:
5.7a.cpp:61:39: 警告: 不建议使用从字符串常量到‘char*’的转换 [-Wwrite-strings]
5.7a.cpp:61:39: 警告: 不建议使用从字符串常量到‘char*’的转换 [-Wwrite-strings]
5.7a.cpp:65:43: 警告: 不建议使用从字符串常量到‘char*’的转换 [-Wwrite-strings]
5.7a.cpp:65:43: 警告: 不建议使用从字符串常量到‘char*’的转换 [-Wwrite-strings]

windows下运行正常难道是编译器有区别???  小生新手多多指教



以下是问题补充:

@周耀1994:请问这个警告又是怎么回事::怎么修改才行?? (2013/05/08 07:54)
加载中
0
Hyacinthus_M
Hyacinthus_M

strlen()、strcpy()在C语言中均在string.h中声明,在C++中使用时要加上前缀c去掉.h就好了。

#include <cstring>

Hyacinthus_M
Hyacinthus_M
回复 @周耀1994 : Warning已经很明确的告诉你了,是字符串的转换的问题。
周耀1994
周耀1994
那个警告是为什么???求指教!!
周耀1994
周耀1994
谢谢了!!问题解决了
0
SErHo
SErHo
strlen和strcpy这两个函数的头文件是  cstring,你加上试试。
波雅
回复 @周耀1994 : 怎么解决的啊
周耀1994
周耀1994
谢谢!问题解决了
0
eechen
eechen
你这<title>不利于SEO, 先把 ununtu 改回 ubuntu 再说.
周耀1994
周耀1994
不好意思因该是ubuntu 打错了
0
戴威
戴威
ununtu是啥?
周耀1994
周耀1994
不好意思是应该是ubuntu
0
周耀1994
周耀1994

引用来自“SErHo”的答案

strlen和strcpy这两个函数的头文件是  cstring,你加上试试。
加上#include<cstring>  
周耀1994
周耀1994
谢谢!!
0
songqt
songqt

警告的问题:

把 char *name1,char *stu_no1 改为 const char *name1, const char *stu_no1试试

返回顶部
顶部