2016-03-29 3 views
0

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

||=== Build: Debug in Big HW (compiler: GNU GCC Compiler) ===| 
C:\Facultate Personal\DSA\Big HW\big_hw.cpp||In instantiation of 'void Polynomial<T>::readP() [with T = int]':| 
C:\Facultate Personal\DSA\Big HW\big_hw.cpp|58|required from here| 
C:\Facultate Personal\DSA\Big HW\big_hw.cpp|31|error: no matching function for call to 'Queue<int>::enqueue(term&)'| 
C:\Facultate Personal\DSA\Big HW\big_hw.cpp|31|note: candidate is:| 
C:\Facultate Personal\DSA\Big HW\queue.h|17|note: void Queue<T>::enqueue(T) [with T = int]| 
C:\Facultate Personal\DSA\Big HW\queue.h|17|note: no known conversion for argument 1 from 'term' to 'int'| 
C:\Facultate Personal\DSA\Big HW\big_hw.cpp||In instantiation of 'void Polynomial<T>::invert() [with T = int]':| 
C:\Facultate Personal\DSA\Big HW\big_hw.cpp|59|required from here| 
C:\Facultate Personal\DSA\Big HW\big_hw.cpp|50|error: no match for 'operator[]' (operand types are 'Queue<int>' and 'int')| 
C:\Facultate Personal\DSA\Big HW\big_hw.cpp|50|error: no match for 'operator[]' (operand types are 'Queue<int>' and 'int')| 
C:\Facultate Personal\DSA\Big HW\big_hw.cpp||In instantiation of 'void Polynomial<T>::computeX(T) [with T = int]':| 
C:\Facultate Personal\DSA\Big HW\big_hw.cpp|60|required from here| 
C:\Facultate Personal\DSA\Big HW\big_hw.cpp|42|error: no match for 'operator[]' (operand types are 'Queue<int>' and 'int')| 
C:\Facultate Personal\DSA\Big HW\big_hw.cpp|42|error: no match for 'operator[]' (operand types are 'Queue<int>' and 'int')| 
C:\Facultate Personal\DSA\Big HW\big_hw.cpp|42|error: no match for 'operator[]' (operand types are 'Stack<int>' and 'int')| 
C:\Facultate Personal\DSA\Big HW\big_hw.cpp|42|error: no match for 'operator[]' (operand types are 'Stack<int>' and 'int')| 
||=== Build failed: 7 error(s), 6 warning(s) (0 minute(s), 0 second(s)) ===| 

Функция чтения и главный:

#include <iostream> 
#include <math.h> 
#include "queue.h" 
#include "stack.h" 
using namespace std; 

struct term{ 
int coef; 
int expo;}; 

template<typename T> class Polynomial{ 
private: 
T coef; 
T expo; 
public: 
Queue<T> polin; 
int n; 
struct term *p; 


Polynomial(){} 
~Polynomial(){} 

void readP() 
{ 
    cout<<"Please insert the maximum grade of the polynomial: "; cin>>n; 
    for(int i=0;i<=n;i++) 
    { 
     cout<<"Please insert the coefficient for x^"<<(n-i)<<": "; cin>>p[i].coef; 
     p[i].expo=n-i; 
     polin.enqueue(p[i]); 

    } 
    cout<<endl; 
} 
}; 
int main() 
{ 
Polynomial<int> polin; 
polin.readP(); 
polin.invert(); 
polin.computeX(2); 
return 0; 
} 

Функция Ставить это:

void enqueue(T x) { 
     if (size >= NMAX) { 
      cout << "The queue is FULL" << endl; 
      return; 
     } 

     queueArray[tail] = x; 
     tail=(tail+1)%NMAX; 
     size--; 
    } 

Что я сделал не так?

+0

Пожалуйста, пост ошибки как текст вашего вопроса. – NathanOliver

+0

Выполнено, извините, мой первый пост. –

+0

Вы получаете доступ к указателю с индексирующим оператором: '' 'struct term * p;' '' '' 'p [i]' '', что дает неопределенное поведение (по крайней мере, в этом случае). –

ответ

0

Ошибка довольно понятна:

error: no matching function for call to 'Queue<int>::enqueue(term&) 

Вы пропускание термина объекта в функцию Епдиеей, ожидающий T (= целое). возможно, вы хотели пройти p[i].coef или p[i].expo?

error: no match for 'operator[]' (operand types are 'Queue<int>' and 'int') 

Это не выглядит как Queue имеет оператор индексирования.

Edit:

я заметил что-то другое тоже. Когда вы читаете term s, вы помещаете их в переменную struct term *p, но обращаетесь к ней с p[i]. Это означает, что если i> 0, вы находитесь на неопределенной территории поведения.

Мое предложение было бы избавиться от переменной p и написать свой цикл, как это:

for (int i = 0; i <= n; i++) 
{ 
    term t; 

    std::cout << "Please insert the coefficient for x^" << (n - i) << ": "; 
    std::cin >> t.coef; 
    t.expo = n - i; 

    polin.enqueue(t); 
} 
+0

Я должен содержать каждый член многочлена в круговой очереди, а член многочлена имеет показатель степени и коэффициент. Я должен как-то держать их обоих. –

+0

Тогда почему есть '' 'Queue ' '', почему бы не просто '' 'Queue ' ''? –

+0

Я изменил его с помощью очереди . Теперь я могу скомпилировать его, но после того, как я прочитал оценку и коэффициент, он перестает работать. А также другие функции имеют некоторые проблемы с этой очередью , но она будет управляемой –

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