Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 3 của 3

Chủ đề: Lỗi phần Template

  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Lỗi phần Template

    Em viết chương trình tạo một lớp template ma trận với các hàm toán tử >>,<< để nhập xuất ma trận.Mình khai báo các hàm toán tử >>,<< là các hàm bạn,nhưng không hiểu vì sao nó lại báo lỗi.Mong các bác pro giúp em sửa lỗi với.Em cảm ơn trước.
    Mã:
    #include<iostream>
    using namespace std;
    template<typename T,int m,int n>
    class matran{
          private:
                  T mat[m][n];
          public:
                 friend istream& operator>>(istream& in,matran<T,m,n>& B);
                 friend ostream& operator<<(ostream& out,const matran<T,m,n>& B);            
    };
    template<typename T,int m,int n>
    istream& operator>>(istream& in,matran<T,m,n>& B){
          for(int i=0;i<m;i++)
              for(int j=0;j<n;j++){
                  cout<<"nhap mat["<<i<<"]["<<j<<"]=";
                  in>>B.mat[i][j];       
              }         
          return in;    
    }
    template<typename T,int m,int n>
    ostream& operator<<(ostream& out,const matran<T,m,n>& B){
          for(int i=0;i<m;i++)
              for(int j=0;j<n;j++)
                  out<<B.mat[i][j]<<"  ";
          return out;                 
    }
    int main(){
          matran<int,2,3> A;
          cin>>A;
          cout<<"ma tran A:"<<endl;
          cout<<A;
          system("PAUSE");
          return 0;    
    }

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    sửa lại khai báo trong class matran:

    template<typename U, int x, int y>
    friend istream& operator>>(istream& in,matran<U,x,y>& B);

    template<typename U, int x, int y>
    friend ostream& operator<<(ostream& out,const matran<U,x,y>& B);


    vì hàm << >> này là friend với mọi T,m,n, nên nó ko thể hard-code T,m,n trong class matran được, nên phải đổi matran<T,m,n> thành matran<U,x,y> (U x y tên gì cũng được miễn đừng là bộ 3 T,m,n). Mà đổi tên như vậy thì phải khai báo U,x,y, vì vậy mới có thêm cái template<typename U, int x, int y> ở đằng trước.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Em sửa được rồi.Thanks bác nhiều

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •