undefined reference to `CStudent::mCount'
时间: 2023-11-06 11:02:01 浏览: 114
undefined reference to `CStudent::mCount'是一个错误信息,它表示在代码中找不到CStudent类的静态成员变量mCount的定义。在给出的代码中,没有看到任何关于CStudent类的mCount变量的定义。要解决这个问题,你需要在CStudent类中添加mCount的定义,并确保它被正确初始化和使用。
相关问题
#include <iostream.h> #include <string.h> class CStudent { public: CStudent(char *n, int a); ~CStudent(); static void SetAge(int age); private: char *name; int age; static int nTotalObj; }; int CStudent::nTotalObj = 0; CStudent::CStudent(char *n, int a) :age(a) { int nLen = strlen(n); name = new char[nLen+1]; strcpy(name,n); name[nLen] = '\0'; nTotalObj++; } CStudent::~CStudent() { delete[] name; nTotalObj--; } void CStudent::SetAge(int age) { this->age = age; } void main() { CStudent stu1("张三",25); CStudent str2("李四",26); cout<<"CStudent::nTotalObj="<<CStudent::nTotalObj<<endl; }
这是一个简单的 C++ 程序,定义了一个名为 CStudent 的类,包含了一个构造函数、一个析构函数、一个静态成员变量 nTotalObj 和一个静态成员函数 SetAge。程序的主函数 main 中创建了两个 CStudent 对象 stu1 和 stu2,输出 nTotalObj 的值。这个值表示在程序运行过程中创建的 CStudent 对象的数量。输出结果应该是:CStudent::nTotalObj=2。
#include <iostream.h> #include <string.h> class CStudent { public: CStudent(char *n, int a); ~CStudent(); static void SetAge(int age); private: char *name; int age; static int nTotalObj; }; int CStudent::nTotalObj = 0; CStudent::CStudent(char *n, int a) :age(a) { int nLen = strlen(n); name = new char[nLen+1]; strcpy(name,n); name[nLen] = '\0'; nTotalObj++; } CStudent::~CStudent() { delete[] name; nTotalObj--; } void CStudent::SetAge(int age) { this->age = age; } void main() { CStudent stu1("张三",25); CStudent str2("李四",26); cout<<"CStudent::nTotalObj="<<CStudent::nTotalObj<<endl; }问题三:如果不改变主函数和类 CStudent 中的成员变量的属性,应该如何改正该程序?
这个程序存在一个问题,就是在类 CStudent 中定义的 name 和 age 成员变量没有进行释放,会导致内存泄漏。解决方法是在类的析构函数中释放这些成员变量。
修改后的代码如下:
```
#include <iostream.h>
#include <string.h>
class CStudent {
public:
CStudent(char *n, int a);
~CStudent();
static void SetAge(int age);
private:
char *name;
int age;
static int nTotalObj;
};
int CStudent::nTotalObj = 0;
CStudent::CStudent(char *n, int a) : age(a) {
int nLen = strlen(n);
name = new char[nLen + 1];
strcpy(name, n);
name[nLen] = '\0';
nTotalObj++;
}
CStudent::~CStudent() {
delete[] name;
nTotalObj--;
}
void CStudent::SetAge(int age) {
this->age = age;
}
void main() {
CStudent stu1("张三", 25);
CStudent str2("李四", 26);
cout << "CStudent::nTotalObj=" << CStudent::nTotalObj << endl;
}
```
这样就能保证在对象被销毁时,其成员变量占用的内存也会被释放,避免了内存泄漏的问题。
阅读全文