Error: ‘DSSV’ is not a class template

Em có làm 1 bản mẫu danh sách sinh viên, 1 bản mẫu sinh viên, mà nhận được lỗi như tiêu đề, cho e hỏi là fix như nào bao giờ ạ?

#include <iostream>

using namespace std;

template<class A=int, class B=float>
class sv{
    string ten;
    A id;
    B d1, d2, d3;
    public:
    friend class DSSV<A,B>;                        // lỗi
        sv(string x=" ", A id=0, B d1=0, B d2=0, B d3=0){
            ten=x;
            this->id=id;
            this->d1=d1;
            this->d2=d2;
            this->d3=d3;
        }
        void set(){
            cin.ignore();
            getline(cin,ten);
            cin >> id >> d1 >> d2 >> d3;
        }
        void get(){
            cout << ten << " " << id << " " << d1 << " " << d2 << " " << d3 << endl;
        }
};

template <class C=int, class D=float>
class DSSV{                // lỗi
    sv<C,D> *a;
    int soluong;
    public:
        DSSV(int n=0){
            a = new sv<C,D>[soluong];
        }
        void sset(){
            for(int i=0;i<soluong;i++)
                a[i].set();
        }
        void gget(){
            for(int i=0;i<soluong;i++)
                a[i].get();
        }

};

int main()
{
    DSSV a(2);

    return 0;
}
friend class DSSV<A,B>;

Do ngang đây trình biên dịch chưa thấy DSSV nên báo lỗi. Bạn cần thêm tiền khai báo ở đầu file:

template<class A, class B> DSSV; // không có ngoặc nhọn

Dòng này kéo theo dòng dưới cũng lỗi luôn.


Khi hai lớp/hàm có nhắc đến nhau thì cần thêm forward declaration cho lớp/hàm được khai báo sau, tốt nhất là ở ngay đầu file.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?