2013-10-08 2 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

правильный способ построить элемент, используя нестандартную CTOR является 'ABC A (обр, Карр, п, п1);' Если вы пишете 'ABC ; A = ABC (...); 'вам понадобится по умолчанию ctor и оператор присваивания. – dyp

+0

Вы не изменяете '' '' '' '' '' '' '' '' '' '' '' ', поэтому этот цикл' while (n) 'либо не будет запускаться вообще, либо работать бесконечно. – dyp

ответ

2

Ваша ошибка «неправильного использование неопределенного типа„класс ABC“» из-за ваш конструктор по умолчанию. Вы объявили конструктор по умолчанию, но вы его не определили.

Вместо ABC(); вы должны по крайней мере сделать ABC() {}

+0

После расточительства около 45 минут ... фу! !! «P» не должен быть столицей в «Общественности». Но компилятор не дал никаких ошибок для этого. Оставшийся код верен, кроме «n--» в цикле while. – Maverick

Смежные вопросы