C++ 如果只能通过';它存储在一个数组中?
我正在制作一个可以求解多项式的程序(从.txt文件读入)。我已经让程序工作到读取文件并从多项式类的信息中生成一个对象,然后在数组中存储指向该多项式对象的共享指针。这样,如果我愿意,我可以访问for循环中的多项式对象。然而,我正试图修正一个函数,该函数将对多项式求值,求取x中替换的任何数字。例如,如果我的多项式是3x^2+11x+9,我想在x=7时解多项式,我只需将7作为eval函数的参数传入,它就会解出来。我的问题是,如果指向某个对象的指针位于数组中,我不知道如何调用该对象上的函数。。这是我的密码:C++ 如果只能通过';它存储在一个数组中?,c++,arrays,pointers,C++,Arrays,Pointers,我正在制作一个可以求解多项式的程序(从.txt文件读入)。我已经让程序工作到读取文件并从多项式类的信息中生成一个对象,然后在数组中存储指向该多项式对象的共享指针。这样,如果我愿意,我可以访问for循环中的多项式对象。然而,我正试图修正一个函数,该函数将对多项式求值,求取x中替换的任何数字。例如,如果我的多项式是3x^2+11x+9,我想在x=7时解多项式,我只需将7作为eval函数的参数传入,它就会解出来。我的问题是,如果指向某个对象的指针位于数组中,我不知道如何调用该对象上的函数。。这是我的密
#include "polynomial.h"
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib> // for exit() call
using namespace std;
void makePolynomials( shared_ptr<Polynomial> pointer1 [], int &x );
int main()
{
shared_ptr<Polynomial> poly[ 100 ];
int nPolynomials = 0;
makePolynomials( poly, nPolynomials );
makePolynomials( poly, nPolynomials );
// print out the polynomials
// -------------------------
for (int j=0; j < nPolynomials; j++)
cout << *(poly[j]);
if(*(poly[0]) == *(poly[1]))
{
cout << "true" << endl;
}
else
{
cout << "they are false" << endl;
}
}
void makePolynomials( shared_ptr<Polynomial> poly[], int &nPolynomials )
{
// get the filename from the user and open the file
// ------------------------------------------------
char filename[20];
cout << "Enter the filename: ";
cin >> filename;
ifstream infile;
infile.open( filename );
if (! infile.is_open()) {
cerr << "ERROR: could not open file " << filename << endl;
exit(1);
}
// read in the data and construct a polynomial for each input line
// ---------------------------------------------------------------
string polynom;
while (getline( infile, polynom ))
{
poly[ nPolynomials ] = shared_ptr<Polynomial>(new Polynomial( polynom ));
nPolynomials++;
}
}
但我收到一条错误消息,说shared_ptr没有成员评估。我不明白为什么会这样,因为eval是在多项式类的公共访问器下的头文件中原型化的?表达式*(poly[0])
在数组的第一个位置取消对共享ptr的引用:
Polynomial& p = *(poly[0]);
你的表达式*(poly[0])->eval(7)代码>将相当于
Polynomial& p = *(poly[0]);
p->eval(7);
shared_ptr<Polynomial>& p = poly[0];
p->eval(7);
它不能工作,因为p
不是指针。你可以通过poly[0]->eval(7)实现你想要的代码>,相当于
Polynomial& p = *(poly[0]);
p->eval(7);
shared_ptr<Polynomial>& p = poly[0];
p->eval(7);
shared_ptr&p=poly[0];
p->eval(7);
shared\u ptr
实现操作符->
的方式是返回指向托管实例的指针,因此您可以使用此操作符调用eval
方法。另请参阅文档。为了完成上面的答案,您应该使用静态强制转换,这样至少编译器会告诉您为什么您所做的不起作用
很可能,声明:
*(poly[i])->eval(7)
被解释为:
获取多边形数组中的第i项
尝试对(预期的)指针调用eval方法,但这不起作用,因为poly数组的第i项是对共享_ptr对象的引用,而不是多项式
取消引用方法的结果(返回)
在代码中,您可以使用:
static_cast<Polynomial&>(*poly[0]).eval(7)
static_cast(*poly[0])eval(7)
这告诉编译器您要调用共享的\u ptr类的多项式&转换运算符,然后,使用生成的引用多项式实例调用eval方法。Try poly[0]->eval(7)@克丽丝提坦黄昏哇,真管用。非常感谢。你能解释一下为什么我必须像这样指向for循环中的数组吗……for(int j=0;j运算符->
取消对指针的引用。