注册 登录
编程论坛 C++教室

这个错误怎么改啊?帮帮忙啊,各位!

wei1987 发布于 2007-12-12 23:14, 761 次点击
#define N 20
class student
{
private:char name[20];
        float score;
public:
    student();
    void display();
    float Get();

};
template<class T>
class array
{
private:T s[N];
public:T GetArray(T *p);
    void set();
       float GetAverage();

};


#include"student.h"
#include<iostream>
using namespace std;
student::student()
{
    cout<<"请输入学生的姓名:"<<endl;
    cin>>name;
    cout<<"请输入学生的成绩:"<<endl;
    cin>>score;
}
float student::Get()
{
    return score;
}
void student::display()
{
    cout<<"姓名:"<<name<<"  成绩:"<<score<<endl;
}
template<class T>
T array<T>::GetArray(T *p)
{
    for(int i=0;i<N;i++)
    {
        &array[i]=p;
    }
    return s[i].Get();
}

template<class T>
float array<T>::GetAverage()
{
    float sum=0;
    for(int i=0;i<N;i++)
    {
        sum+=s[i].Get();
    }
    return sum/N;
}



#include"student.h"
#include<iostream>
#include<cmath>
using namespace std;
#define N 20
int main()
{
    student a[N];
    array<student> b;
    b.GetArray(a);
    cout<<b.GetAverage()<<endl;
}



-------------------Configuration: student - Win32 Debug--------------------
Linking...
test.obj : error LNK2001: unresolved external symbol "public: float __thiscall array<class student>::GetAverage(void)" (?GetAverage@?$array@Vstudent@@@@QAEMXZ)
test.obj : error LNK2001: unresolved external symbol "public: class student __thiscall array<class student>::GetArray(class student *)" (?GetArray@?$array@Vstudent@@@@QAE?AVstudent@@PAV2@@Z)
Debug/student.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.

student.exe - 3 error(s), 0 warning(s)
5 回复
#2
PcrazyC2007-12-13 16:51
不只是模板类实现地方的问题,实现的时候也有部分问题,我给你改了一下

student.h:

#define N 20
class student
{
private:char name[20];
        float score;
public:
    student();
    void display();
    float Get();

};
template<class T>
class array
{
private:
    T s[N];
public:
    float GetArray(T *p);
    void set();
    float GetAverage();

};

template<class T>
float array<T>::GetArray(T *p)
{
    for(int i=0;i<N;i++)
    {
        s[i]=*p;
    }
    return s[i].Get();
}

template<class T>
float array<T>::GetAverage()
{
    float sum=0;
    for(int i=0;i<N;i++)
    {
        sum+=s[i].Get();
    }
    return sum/N;
}


student.cpp:

#include"student.h"
#include<iostream>
using namespace std;

student::student()
{
    cout<<"请输入学生的姓名:"<<endl;
    cin>>name;
    cout<<"请输入学生的成绩:"<<endl;
    cin>>score;
}
float student::Get()
{
    return score;
}
void student::display()
{
    cout<<"姓名:"<<name<<"  成绩:"<<score<<endl;
}


main.cpp:

#include"student.h"
#include<iostream>
#include<cmath>
using namespace std;

int main()
{
    student a[N];
    array<student> b;
    b.GetArray(a);
    cout<<b.GetAverage()<<endl;
    return 0;
}
#3
wei19872007-12-13 22:29
还是那个错误啊
#4
PcrazyC2007-12-14 10:12
你什么编译器啊,是VC++ 6.0不,你要按我的来,哪个文件放什么,不要只是改你的文件,程序代码改了,代码所在的文件位置也改了
#5
wei19872007-12-17 21:03
调试之后没有我要的结果啊
#6
unicafree2007-12-18 21:20
#include <iostream>
using namespace std;
class student{
public:
       student();
       void display();
       float get();
private:
        char name[20];
        float score;
};

student::student()
{
    cout<<"please input student name:";
    cin>>name;
    cout<<"pleasa input student score:";
    cin>>score;
}
float student::get()
{
      return score;
}
void student::display()
{
     cout<<"name:"<<name<<"score:"<<score<<endl;
}

class array{
public:
      
       array();
       float getaverage();
private:
        student s[4];
        };
array::array()
{
 }

float array::getaverage()
{
    float sum=0.0,average=0.0;               
    for(int i=0;i<5;i++)
    sum+=s[i].get();
    average=sum/5;
    return average;
}
int main()
{
    array b;
    cout<<b.getaverage();
    return 0;
}
不知道你的意思,你不要用模板啊,直接象我上面的程序,
就是计算出一个班人的平均成绩,是吗?
1