2 qq 23115189 qq_23115189 于 2017.01.01 21:07 提问

各位大神,小弟有的一个C++的问题,是关于类函数的使用和该类的全局变量使用冲突的问题 2C

C++代码如下,求各位大神支招,其实应该很简单,还是我忘了一些语法~~代码什么的都不重要,就开头那里的几句关于提前声明类和定义该类的全局变量冲突了~~
#include
#include
#include
#include
#include
#include

using namespace std;

bool flag = true;

char G_name[20] = "";

class Student;

Student *head = new Student(G_name,0,0);

class Student
{
public:
Student(char *name, int number, int age)
{
int i = 0;

    for (i = 0;i < sizeof(name);i++)
    {
        this->m_name[i] = name[i];
    }

    this->m_number = number;

    this->m_age = age;
}

~Student()
{
    cout << "删除该学生信息完毕" << endl;
}

void AddHead(Student *std)
{
    cout << "请输入你想要插入的学生的姓名" << endl;

    cin >> std->m_name;

    cout << "请输入你想要插入的学生的学号" << endl;

    cin >> std->m_number;

    cout << "请输入你想要插入的学生的年龄" << endl;

    cin >> std->m_age;

    std->p = head;

    head->p = NULL;

    head = std;

    std = NULL;
}

void AddTail(Student *std)
{
    cout << "请输入你想要插入的学生的姓名" << endl;

    cin >> std->m_name;

    cout << "请输入你要插入的学生的学号" << endl;

    cin >> std->m_number;

    cout << "请输入你要插入的学生的年龄" << endl;

    cin >> std->m_age;

    Student *ff = NULL;

    ff = head;

    while (ff->p != NULL)
    {
        ff = ff->p;
    }

    ff->p = std;

    std->p = NULL;
}

void Print()
{
    Student *ff = NULL;

    ff = head;

    cout << "学生年龄" << "     " << "学生姓名" << "     " << "学生学号" << endl;

    while (ff->p != NULL)
    {
        cout << ff->m_age;
        cout << "     ";
        cout << ff->m_name;
        cout << "     ";
        cout << ff->m_number << endl;
    }
    cout << ff->m_age;
    cout << "     ";
    cout << ff->m_name;
    cout << "     ";
    cout << ff->m_number << endl;
}

void Delete()
{
    Student *ff = NULL;

    Student *fx = NULL;

    ff = head;

    int number = 0;

    cout << "请输入你要删除的学生的学号" << endl;

    cin >> number;

    while (ff->m_number != number)
    {
        ff = ff->p;
    }

    fx = ff;

    ff = ff->p;

    free(fx);

    fx = NULL;
}

void Modify()
{
    Student *ff = NULL;

    Student *fx = NULL;

    ff = head;

    int number = 0;

    cout << "请输入你要修改的学生的学号" << endl;

    cin >> number;

    while (ff->m_number != number)
    {
        ff = ff->p;
    }

    cout << "请输入修改后的学生姓名" << endl;

    cin >> ff->m_name;

    cout << "请输入修改后的学生学号" << endl;

    cin >> ff->m_number;

    cout << "请输入修改后的学生年龄" << endl;

    cin >> ff->m_age;
}

void Exit()
{
    cout << "您好,您已经退出" << endl;
}

private:
char m_name[20];
int m_number;
int m_age;
Student *p = NULL;
};

void print()
{
cout << "请输入您想要执行的命令的选项" << endl;
cout << "1.我想前插入一个学生信息" << endl;
cout << "2.我想后插入一个学生的信息" << endl;
cout << "3.我想打印所有当前学生的信息" << endl;
cout << "4.我想删除某位学生的信息" << endl;
cout << "5.我想修改某位学生的信息" << endl;
cout << "6.我什么也不想做,直接退出" << endl;

}

void Execute()
{
int a = 0;

cin >> a;

char name[20] = "";

int number = 0;

int age = 0;

Student *stud = new Student(name, number, age);

switch (a)
{
    case 1:
        head->AddHead(stud);
        break;
    case 2:
        head->AddTail(stud);
        break;
    case 3:
        head->Print();
        break;
    case 4:
        head->Delete();
        break;
    case 5:
        head->Modify();
        break;
    case 6:
        flag = false;
        break;
default:
    break;
}

}

int main(void)
{
while (flag)
{
print();

    Execute();
}
system("pause");

return 0;

}
最后编译器就给我一句话:“Student”:类没有构造函数。该如何解决啊~~大神们

7个回答

oyljerry
oyljerry   Ds   Rxr 2017.01.01 21:14

把Student的类定义放到一个单独头文件,然后再用的地方包含。

qq_23115189
qq_23115189 大神,那为什么不可以直接在前面直接提前声明类呢??这样不也是表明了类已经提前定义好了吗~麻烦您给指点哈迷津,新手,并且是好久没有接触C++忘了,麻烦了~~
一年多之前 回复
bojie5744
bojie5744   Rxr 2017.01.01 23:09

using namespace

qq_29566841
qq_29566841   2017.01.02 00:13

这个问题是这样的。你的操作不是太规范,自然会遇到一些奇怪的问题。标准的C++编程规范中,类的申明和实现是分开的,你应该用一个student.h来申明类,用一个student.cpp实现该类的具体方法;然后在你的主cpp文件中include “student.h”就OK了,试试看。

YXTS122
YXTS122   2017.01.02 05:07

Student *head=new Student(G_name,0,0);你把这句话写在class{};的后面就没事了

Ashinee
Ashinee   2017.01.03 00:11

注意到你代码开始的位置有这么两行代码

class Student;
Student *head = new Student(G_name,0,0); 

你在这里仅仅作了一个前向声明,这种情况下使用Student *定义一个指针变量是没有问题。
但是new Student(G_name,0,0)这句代码实际是在调用Student类的构造函数创造该类的一个实例。
C/C++语法都要求先声明再调用,你的Student类是在你调用new Student之后才定义的(其实class Student{}这个操作用‘声明’来描述更准确一些)。
所以编译器认为Student * head没错,用new Student有错。

La_vie_est_belle
La_vie_est_belle   2017.01.03 15:36

楼上的有道理或者你试试在public: 下面再加一条 Student(){} 看看行不行。

shen_wei
shen_wei   Ds   Rxr 2017.01.04 16:43

Student.h 和 Student.cpp 两个文件,

或者你可以都写在main.c 当中。。。

写类你可以分开,也可以在同一个文件中写。。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Android牛人博客集合
最近看到别人两个月时间锻炼成安卓大神,真心牛逼,没玩两点多睡,向他人学习啊!http://blog.csdn.net/u011068702/article/category/2541183----两个月学会安卓并且技术还是大神的博客,http://www.cnblogs.com/rollenholt----这是一个大二的学生的博客,自叹不如,http://my.csdn.net/lmj623565
js使用心得——避免全局变量冲突的小技巧
JAVASCRIPT语言 学习js语言,分享使用体验 js使用心得——避免全局变量冲突的小技巧 2013年09月12日磨延城1415 浏览 0 js  美学控  [文章作者:磨延城 转载请注明原文出处: http://mo2g.com/view/43/ ] 在写js代码的时候,经常会因为这样或者那样的原因用到全局变量,如
Android开发中的线程问题
Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行(也就是主线程中完成)此时如果存在多个子线程同时操作主线程的情况,此时就有可能出现UI加载出现混乱。但是又不能总在主线程中执行耗时的方法,这样也会导致程序出现ANR的异常情况。那么如何解决问题呢? Android中有消息一说,Message和Handler。 Handler: 1)按计划发送消息或执行某个Runnanbl
c++全局变量在大型程序中不应出现太多
c++全局变量在大型程序中不应出现太多: 原因: 1、使用全局变量实际上是增加了模块之间的耦合强度,同时会产生数据有效性问题,当然这种耦合强度还是可接受的,有时候也是避免不了。 2、重新构建你的数据结构,把公有数据成员抽离出来,单独做成模块,提供一个接口对其操作。 3.全局变量是在程序开始时进行初始化的,这样会造成你的程序启动变慢,同时他的生存周期也是在整个程序中最长的,另外还有诸
java大神潜在的十个特征
java以其简单,稳健,高效的特性对于编程来说是个不错的选择,那么我们该如何学习掌握这门语言呢?下面列举了一些关于学习java的一些心得,希望对大家有所帮助 1.订阅最新资讯 学习新技术首先要做的是订阅相关的技术社区论坛。我们并非是独行者。很多人都和我们一样在研究着相同的技术。只对某个框架概念做验证是不难,但是当你将这些概念应用到实际的项目中时,那么各种各样的问题,各种在搜索不到解决方
Java全局变量在并行时引起的问题
最近刚完成了一个云服务平台的开发工作,系统采用Spring架构,其中测试使用的是TestNG,可以利用注解的方式,开启多线程,并且开启多个测试任务。其中遇见许多问题,闲暇之余记录下来以避免在后续项目中再犯同样的错误。   这是项目中的一段单元测试代码,使用了MockMvc与TestNG相结合。   好处: 项目不用启动服务器就可以对SpringMVC进行测试。 可以任意的开启线程与多个任务。 @
项目问题总结一、全局变量引起的并发问题
springmvc+hibernate+jdbctemplate+mysql 先看下面小段代码,一个controller,一个service。        controller.java代码:     ........     @Autowired      private XXXService xxxService;     ........     @Reque
关于静态库中使用全局变量可能导致的问题
同事找我看一个问题,一个访问全局变量不符合预期的问题。 因为新工程中静态库动态库非常多,非常不利于分析问题。 再因为并不是一个业务逻辑问题,而是一个语言层面的问题,所以我单独抽象出产生问题的环境,简化问题,更容易分析。 刚开始,是一个方案,五个工程,能够复现问题。 然后继续缩减三个工程,依然能够复现问题。 三个工程分别为静态库A,DLL B,EXE C。三者的依赖关系为:B依赖A, C依
实验9 问题 E: 编写函数:各位数字之和 (Append Code)
题目描述 给定一个正整数,求它的各位数字之和,直到这个和只有一位数为止。 例如,给出整数1236,那么计算 1+2+3+6=12 因为12是一个两位数,所以继续求和 1+2=3 得到结果为:3。 ----------------------------------------------------------------------------- 编写一个函数digit_su
【程序3】打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身
/*题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如: 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 */ public class Java03 { public static void main(String[] args){ int a,b,c; System.out.println("水仙花数有: