0

我有以下结构:

template <class T>
struct Array{
    int lenght;
    T * M;

    Array( int size ) : lenght(size), M(new T[size])
    {
    }

    ~Array()
    {
       delete[] M;
    }
};

和类(将填充结构的对象):

class Student{

private:
int ID;
int group;
char name[];
 public:

     Student();
     ~Student();

    void setStudent(int,int,char){

    }

    char getName(){
        return *name;
    }

    void getGroup(){

    }

    void getID(){

    }

};

现在,当我想初始化 Array 类型时,我在 Main.cpp 中得到以下内容:

#include <iostream>
#include "Domain.h"
#include "Student.h"
//#include ""

using namespace std;

int main(){
    cout<<"start:"<<endl<<endl;

    Array <Student> DB(50);
    Array <Student> BU(50);


    return 0;
}

错误:

g++ -o Lab6-8.exe UI.o Repository.o Main.o Domain.o Controller.o
Main.o: In function `Array':
D:\c++\Begin\Lab6-8\Debug/..//Domain.h:16: undefined reference to `Student::Student()'
D:\c++\Begin\Lab6-8\Debug/..//Domain.h:16: undefined reference to `Student::~Student()'
Main.o: In function `~Array':
D:\c++\Begin\Lab6-8\Debug/..//Domain.h:21: undefined reference to `Student::~Student()'

知道为什么吗?

4

2 回答 2

3

当你写:

class Student
{
public:
   Student();
   ~Student();
};

您已经明确声明了类构造函数和析构函数,因此编译器没有为您定义它们 - 您需要提供它们的定义(实现)。在微不足道的情况下,这可以完成这项工作:

class Student
{
public:
   Student(){};
   ~Student(){};
};
于 2012-04-30T16:13:02.973 回答
1

这是因为您已经声明了 的构造函数和析构函数Student,但缺少它们的定义

Student您可以在 .h 文件中提供这些定义作为声明的一部分内联:

Student() {
    // initialize the student
}
~Student() {
    // release dynamically allocated parts of the student
}

或在 cpp 文件中的类声明之外:

Student::Student() {
    // initialize the student
}
Student::~Student() {
    // release dynamically allocated parts of the student
}

作为旁注,name应该是std::stringchar除非你真的想要一个字母的名字。

于 2012-04-30T16:11:59.967 回答