2015-05-14 2 views
0

Друзей Я определил класс стека, который делает стек структуру, а другой класс, который использует стек (создание динамически), как показано нижеОпределение стек динамически в конструкторе класса, который является частным членом

struct A{ 
    int a; 
    ..... 
}; 

class stack{ 
    private: 
    int head,max; 
    A* data;  // pointer of structure 'A' 
    public: 
    stack(int length){ // constructor to allocate specified memory 
     data = new A[length]; 
     head = 0; 
     max = length; 
    } 
    void push(A){....} //Accepts structure 'A' 
    A pop(){.......}  //Returns structure 'A' 
}; 

//Another class which uses stack 
class uses{ 
    private: 
    stack* myData; 
    void fun(A); //funtion is accepts structure 'A' 
    .......... 

    public: 
    uses(int len){ 
     myData = new stack(len); //constructor is setting length of stack 
    } 
}; 

void uses::fun(A t){ 
    A u=t; 
....done changes in u 
myData.push(u); //error occurs at this line 
} 

Теперь Проблема заключается в том, когда я компилирую его, появляется ошибка, которая гласит: «Структура, требуемая в левой части. или. *»

Я тестирую класс стека в основном, создавая объекты структуры и вставляя их в стек и вставляя их! это означает, что мой класс стека работает нормально.

Я знаю, что эта ошибка возникает, когда мы пытаемся вызвать конструкцию без предоставления необходимых аргументов, но я даю значения, поэтому почему эта ошибка возникает.

+1

Изменение 'стека * MyData,' 'в стек MyData, или' myData.push (и); ' to 'myData-> push (u); 'для исправления ошибки компилятора. Предпочтительно первый вариант. –

+0

@Muhammad Zubair ALi В будущем, когда вы публикуете такие вопросы, вы можете добавить строку #, о которой компилятор жалуется, или, возможно, даже скопировать вывод компилятора дословно. –

+0

Если я делаю это 'stack myData; 'тогда как я установлю размер стека, который настраивается в конструкторе .. Большое спасибо за ответ. –

ответ

2

Чтобы исправить ошибку компилятора, у вас есть два варианта, как указаны в моем комментарии:

  1. Изменения stack* myData; стек myData;
  2. Изменения myData.push(u); в myData->push(u);

предпочтительней конструкции является первым вариантом ,

Для того, чтобы 1-й вариант работы вы должны использовать список инициализации членов вашего конструктора:

class uses{ 
private: 
    stack myData; 

public: 
    uses(int len) : myData(len) { 
    } 
}; 
+0

спасибо! –

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