2013-10-08 62 views
0

我想重載>>操作符來旋轉數組中的元素。我已經刪除了數組聲明並初始化以縮短代碼。 但編譯器給出的錯誤是「未定義類型ABC類'的無效使用。」還有很多。在參數化構造函數中傳遞數組作爲參數

#include<iostream> 
using namespace std; 
class ABC 
{ 
     int iarr[10],n2,n3; 
     char carr[10]; 

     Public: 
      ABC(); 
     ABC(int arr[],char car[],int n,int n1) 
     { 
       n2=n; n3=n1; 
       for(int i=0;i<n;i++) 
       iarr[i]=arr[i]; 
       for(int i=0;i<n1;i++) 
         carr[i]=car[i]; 
     } 

     ABC operator>>(int n) 
     { 
      while(n) 
      { 
        int temp; 
        temp=iarr[n2-1]; 
        for(int i=n2-1;i>=0;i--) 
        { 
         iarr[i]=iarr[i-1]; 
        } 
        iarr[0]=temp; 
      } 
     } 

     void display() 
     { 
      for(int i=0;i<n2;i++) 
       printf("%d\t",iarr[i]); 
      printf("\n"); 
      for(int i=0;i<n3;i++) 
       printf("%d\t",carr[i]); 
     } 
}; 

main() 
{ 
    ABC A; 
    A=ABC(arr,car,n,n1); 
    A.display(); 
} 
+0

的正確方法使用非默認的構造函數是'ABC A(ARR,卡爾,N,N 1)構建一個元素;'如果你寫的'農行A ; A = ABC(...);''你需要一個默認的ctor和一個賦值操作符。 – dyp

+0

你不會修改'operator'裏面的'n',所以while(n)'這個循環根本不會運行或者無限運行。 – dyp

回答

2

你的錯誤「非法使用未定義類型的‘ABC類’」是因爲你的默認構造函數。你已經聲明瞭一個默認的構造函數,但是你沒有定義它。

相反的ABC();你需要ATLEAST做ABC() {}

+0

浪費大約45分鐘之後...... phew !!'P'不應該是'公共'的資本。但編譯器沒有給出任何錯誤。除while循環中的「n--」外,其餘代碼是正確的。 – Maverick

相關問題