Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: lập trình hướng đối tượng: em không friend được function với class

  1. #1
    Ngày gia nhập
    04 2021
    Bài viết
    1

    Mặc định lập trình hướng đối tượng: em không friend được function với class

    #include<iostream>
    #include<conio.h>
    #include<stdio.h>
    #include<string.h>
    using namespace std;

    class NhaSx
    {

    char TenNSX[30];
    char Diachi[30];
    friend class May;
    friend class Maytinh;
    friend void NSXIBM(Maytinh a, int n); lỗi ở đây: 'Maytinh' has not been declared
    };
    class May
    {
    public:
    char nhanhieu[30];
    float giathanh;
    NhaSx NSX;
    void input();
    void output();
    friend void NSXIBM(Maytinh a, int n);
    };
    class Maytinh : public May
    {
    public:
    char tocdo[30];
    char dungluongRAM[30];
    char dungluongHDD[30];
    void input();
    void output();
    friend void NSXIBM(Maytinh a, int n);
    };
    void Maytinh::input()
    {
    cout<<"Nhan hieu: "<<endl;
    fflush(stdin);
    gets(nhanhieu);
    cout<<"Ten nha SX: "<<endl;
    fflush(stdin);
    gets(NSX.TenNSX);
    cout<<"Dia chi: "<<endl;
    fflush(stdin);
    gets(NSX.Diachi);
    cout<<"Gia thanh: "<<endl;
    cin>>giathanh;
    cout<<"Toc do: "<<endl;
    fflush(stdin);
    gets(tocdo);
    cout<<"Dung luong Ram: "<<endl;
    fflush(stdin);
    gets(dungluongRAM);
    cout<<"Dung luong HDD: "<<endl;
    fflush(stdin);
    gets(dungluongHDD);
    }
    void Maytinh::output()
    {
    cout<<"Nhan hieu: "<<nhanhieu<<endl;
    cout<<"Ten nha SX: "<<NSX.TenNSX<<endl;
    cout<<"Dia chi: "<<NSX.Diachi<<endl;
    cout<<"Gia thanh: "<<giathanh<<endl;
    cout<<"Toc do: "<<tocdo<<endl;
    cout<<"Dung luong Ram: "<<dungluongRAM<<endl;
    cout<<"Dung luong HDD: "<<dungluongHDD<<endl;

    }
    void nhapDS(Maytinh a[], int n)
    {
    for(int i=0;i<n;i++)
    {
    a[i].input();
    }
    }
    void xuatDS(Maytinh a[], int n)
    {
    for(int i=0;i<n;i++)
    {
    a[i].output();
    }
    }

    void Sapxep(Maytinh a[], int n)
    {
    for(int i=0;i<n-1;i++)
    {
    for(int j=i+1;j<n;j++)
    {
    swap(a[i],a[j]);
    }
    }
    }
    void NSXIBM (Maytinh a[100], int n)
    {
    for (int i=0;i<n;i++)
    {
    if(strcpy(a[i].NSX.TenNSX,"IBM")==0)
    {
    a[i].output();
    }
    }
    }
    int main()
    {
    Maytinh a[100];
    int n;
    cout<<"Nhap N: ";
    cin>>n;
    nhapDS(a,n);
    NSXIBM(a,n);
    Sapxep(a,n);
    xuatDS(a,n);
    return 0;
    }

  2. #2
    Ngày gia nhập
    02 2016
    Bài viết
    328

    friend class MayTinh; thì compiler có thể dự biết nó là class
    Tuy nhiên, kiểu báo này chỉ tác dụng trong một dòng. Lúc báo trước hàm NXSIBM thì với tham số kiểu MayTinh, compiler không thể dùng báo trước của dòng trên.

    Sửa code lại, báo trước MayTinh là một class hẳn hòi trong module, đặt dòng này ngay sau 'using'
    using namespace std;
    class Maytinh;

    class NhaSx
    {
    ...

    Khi đọc đến class Nhã thì compiler đã được báo trước MayTinh là một class.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn