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

发布于 2021-11-17 11:31:10 字数 3510 浏览 853 评论 14

有一段代码在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<<"nnn 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<<"nn--------------------------nn";
    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下运行正常难道是编译器有区别???  小生新手多多指教



如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(14

好听的两个字的网名 2021-11-21 11:12:34

strlen和strcpy这两个函数的头文件是  cstring,你加上试试。

温柔少女心 2021-11-21 11:12:34

谢谢!!

辞别 2021-11-21 11:12:34

警告的问题:

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

醉生梦死 2021-11-21 11:12:33

ununtu是啥?

拥有 2021-11-21 11:12:33

不好意思是应该是ubuntu

沙与沫 2021-11-21 11:12:29

不好意思因该是ubuntu 打错了

做个少女永远怀春 2021-11-21 11:09:57

你这<title>不利于SEO, 先把 ununtu 改回 ubuntu 再说.

终陌 2021-11-21 11:08:10

谢谢!问题解决了

瑾兮 2021-11-21 11:03:39

回复
怎么解决的啊

柳絮泡泡 2021-11-21 10:59:31

strlen和strcpy这两个函数的头文件是  cstring,你加上试试。

悸初 2021-11-21 10:33:27

谢谢了!!问题解决了

奈何桥上唱咆哮 2021-11-21 10:10:54

那个警告是为什么???求指教!!

想挽留 2021-11-21 00:00:09

回复
Warning已经很明确的告诉你了,是字符串的转换的问题。

落墨 2021-11-20 17:28:26

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

#include <cstring>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文