我有以下结构:
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;
}
ERROR:
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()'
知道为什么吗?
答案 0 :(得分:3)
当你写:
class Student
{
public:
Student();
~Student();
};
你有显式声明类构造函数和析构函数,因此编译器没有为你定义它们 - 你需要提供它们的定义(实现)。在琐碎的情况下,这将完成这项工作:
class Student
{
public:
Student(){};
~Student(){};
};
答案 1 :(得分: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::string
,而不是char
,除非你真的想要一个字母的名字。