C++ 读取多项式

C++ 读取多项式,c++,struct,compilation,polynomial-math,C++,Struct,Compilation,Polynomial Math,嗨,我在读取我创建的多项式时遇到了一个问题。我必须执行一些操作,但我在阅读阶段遇到了问题,我没有找到任何解决方案。 错误包括: ||=== 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:\Fa

嗨,我在读取我创建的多项式时遇到了一个问题。我必须执行一些操作,但我在阅读阶段遇到了问题,我没有找到任何解决方案。 错误包括:

||=== 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)) ===|
||===构建:在大硬件中调试(编译器:GNU GCC编译器)===|
C:\Facultate Personal\DSA\Big HW\Big_HW.cpp | |在“void polymon::readP()[with T=int]”的实例化中:|
C:\Facultate Personal\DSA\Big HW\Big|uhw.cpp | 58 |从这里开始需要|
C:\Facultate Personal\DSA\Big HW\Big_HW.cpp | 31 |错误:对“Queue::enqueue(term&)”的调用没有匹配函数|
C:\Facultate Personal\DSA\Big HW\Big|uhw.cpp | 31 |注:候选人是:|
C:\Facultate Personal\DSA\Big HW\queue.h | 17 |注:void queue::enqueue(T)[带T=int]|
C:\Facultate Personal\DSA\Big HW\queue.h | 17 |注意:参数1从'term'到'int'的转换未知|
C:\Facultate Personal\DSA\Big HW\Big_HW.cpp | |在“void polymon::invert()[with T=int]”的实例化中:|
C:\Facultate Personal\DSA\Big HW\Big|uhw.cpp | 59 |从这里开始需要|
C:\Facultate Personal\DSA\Big HW\Big_HW.cpp | 50 |错误:与“operator[]”不匹配(操作数类型为“Queue”和“int”)|
C:\Facultate Personal\DSA\Big HW\Big_HW.cpp | 50 |错误:与“operator[]”不匹配(操作数类型为“Queue”和“int”)|
C:\Facultate Personal\DSA\Big HW\Big_HW.cpp | |在“void polymone::computeX(T)[with T=int]的实例化中:|
C:\Facultate Personal\DSA\Big HW\Big|uhw.cpp | 60 |从这里开始需要|
C:\Facultate Personal\DSA\Big HW\Big_HW.cpp | 42 |错误:与“operator[]”不匹配(操作数类型为“Queue”和“int”)|
C:\Facultate Personal\DSA\Big HW\Big_HW.cpp | 42 |错误:与“operator[]”不匹配(操作数类型为“Queue”和“int”)|
C:\Facultate Personal\DSA\Big HW\Big_HW.cpp | 42 |错误:与“operator[]”不匹配(操作数类型为“Stack”和“int”)|
C:\Facultate Personal\DSA\Big HW\Big_HW.cpp | 42 |错误:与“operator[]”不匹配(操作数类型为“Stack”和“int”)|
||==生成失败:7个错误,6个警告(0分钟,0秒))===|
读取功能和主要功能:

#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;
}
#包括
#包括
#包括“queue.h”
#包括“stack.h”
使用名称空间std;
结构术语{
内系数;
国际博览会;
模板类多项式{
私人:
T系数;
世博会;
公众:
队列polin;
int n;
结构术语*p;
多项式(){}
~polyman(){}
void readP()
{
coutn;

对于(int i=0;i而言,错误是不言自明的:

error: no matching function for call to 'Queue<int>::enqueue(term&)
它看起来不像
Queue
有索引操作符

编辑:

我还注意到了其他一些东西。当您阅读
术语时,您将它们放入
结构术语*p
变量中,但使用
p[I]
访问它。这意味着如果I>0,则您处于未定义的行为区域

我的建议是去掉
p
变量,然后像这样编写for循环:

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);
}

for(int i=0;我请在您的问题中以文本形式发布错误。完成,抱歉,这是我的第一篇帖子。您正在使用索引运算符访问指针:
struct term*p;
p[i]
,这会产生未定义的行为(至少在本例中)。我必须将多项式的每一项保留在一个循环队列中,多项式的每一项都有一个指数和一个系数。我必须以某种方式保留它们。那么为什么要有一个
队列
,为什么不仅仅是一个
队列
?我用队列对它进行了更改。现在我可以编译它,但在我读了分数和系数之后,它就停止工作了。还有因此,其他函数对该队列有一些问题,但它是可管理的
error: no match for 'operator[]' (operand types are 'Queue<int>' and 'int')
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);
}