【问题标题】:C++ error: 'No suitable conversion from [class name] to "int" 'C++ 错误:'没有从 [类名] 到 "int" 的合适转换'
【发布时间】:2014-08-01 16:53:16
【问题描述】:

我正在研究多项式的加法、减法和乘法课程。

我收到以下错误:

'没有合适的从[类名]到“int”的转换函数'

在语句中:

return c;    (addition function)

return deriv;

任何人都可以就如何纠正这些问题提供任何指导吗?

提前非常感谢, 瑞恩

这是我的代码:

#include "stdafx.h"
#include <iostream>

using namespace std;

class Poly
{
private:

//  int ord;                            // the order of the polynomial
//  int coeff[100];

public:

    int ord;                            // the order of the polynomial
    int coeff[100];


    int a, b, c;
    Poly();                             // constructor
    int addition(int);                  // adds 2 polynomials
    int subtraction(int);               // subtracts 2 polynomials
    int multiplication(int);            // multiplies 2 polynomials
    void evaluate(int);                 // uses Horner's method to compute and return the polynomial evaluated at x
    int differentiate(int);         // 
    void set(int, int);                 // mutator function
    int order();
    void print();                       // prints the results
};

Poly::Poly()            // the default constructor
{
    for (int i = 0; i < 100; i++)
    {
        coeff[i] = 0;
    }
}

void Poly::set(int a, int b)    // mutator function
{
    // coeff = new Poly[b + 1];
    coeff[b] = a;
    ord = order();
}

int Poly::order()
{
    int d = 0;
    for (int i = 0; i < 100; i++)
        if (coeff[i] != 0) d = i;
        return d;
}

void print()
{
    int coeff[] = { 0 };

    for (int i = 99; i >= 0; i--)
    {
        if (coeff[i] != 0)
        {
            cout << coeff[i] << "x^" << i << " ";
        }
    }
}

int evaluate(int x)
{
    int p = 0;
    for (int i = ord; i >= 0; i--)
        p = coeff[i] + (x * p);
    return p;
}

int Poly::differentiate(int)
{
    if (ord == 0)
    {
        Poly t;
        t.set(0, 0);
        return t;
    }

    Poly deriv;
    deriv.ord = ord - 1;

    for (int i = 0; i < ord; i++)
        deriv.coeff[i] = (i + 1) * coeff[i + 1];
    return deriv;
}

int Poly::addition(Poly b)
{
    Poly a = *this;
    Poly c;

    for (int i = 0; i <= a.ord; i++)
        c.coeff[i] += a.coeff[i];
    for (int i = 0; i <= b.ord; i++)
        c.coeff[i] += b.coeff[i];

    c.ord = c.order();

    return c;
}

Poly subtraction(Poly b)
{
    Poly a = *this;
    Poly c;

    for (int i = 0; i <= a.ord; i++)
        c.coeff[i] += a.coeff[i];
    for (int i = 0; i <= b.ord; i++)
        c.coeff[i] -= b.coeff[i];

    c.ord = c.order();

    return c;
}

int Poly::multiplication(Poly b)
{
    Poly a = *this;
    Poly c;

    for (int i = 0; i <= a.ord; i++)
    for (int j = 0; j <= b.ord; j++)
        c.coeff[i + j] += (a.coeff[i] * b.coeff[j]);
    c.order = c.order();
}

int main()
{
    Poly a, b, c, d;
    a.set(7, 4);                //  7x^4
    a.set(1, 2);                //   x^2

    b.set(6, 3);                //   6x^3
    b.set(-3, 2);               //  -3x^2

    c = a.subtraction(b);       // (7x^4 + x^2) - (6x^3 - 3x^2)

    c.print();

    cout << "\n";

    d = c.differentiate().differentiate();

    d.print();

    cout << "\n";

    cout << c.evaluate(2);  // substitute x with 2
    cin.get();

    return 0;
}

【问题讨论】:

  • 听起来完全一样。您不能将Poly 隐式转换为int。对于这两个错误,您正试图从声明为返回 int 的函数中返回 Poly
  • @Jashaszun - 谢谢!但是,WHERE 发生了什么(我是 C++ 新手)?
  • 为什么你的一些操作返回int而另一些返回Poly
  • 此外,您的类声明与您的成员函数定义完全不一致,例如int addition(int);int Poly::addition(Poly b) - 这两者都应该是:Poly Poly::addition(Poly b)
  • 您的构造函数不需要循环。 std::fill 已经进行了该操作。但是,由于它是构造函数,因此请使用构造函数初始值设定项列表 (: coeff{})。 order() 可以使用 std::find_if_not 找到第一个非零值,然后使用 std::iota 填充其余部分。 print 超出本地数组的范围(我怀疑它应该在那里)。通过仅使用向量而不是限制自己订购 100 个,可以更好地处理其中一些问题。

标签: c++ class


【解决方案1】:

你的(第一个)问题出在这个函数中:

int Poly::addition(Poly b)
{
    Poly a = *this;
    Poly c;

    for (int i = 0; i <= a.ord; i++)
        c.coeff[i] += a.coeff[i];
    for (int i = 0; i <= b.ord; i++)
        c.coeff[i] += b.coeff[i];

    c.ord = c.order();

    return c;
}

你说你会返回一个int:

int Poly::addition(Poly b)
//^------ promise to return int

但你返回c,其中cPoly。更改返回类型:

Poly Poly::addition(Poly b)

int Poly::differentiate(int) 有同样的问题。 改成

Poly Poly::differentiate(int)

顺便说一句 - 为什么它会忽略 int

此外,int Poly::multiplication(Poly b) 不会返回任何内容。

您还有其他问题。例如 print 和 evaluate 函数应该是成员函数,使用 std::vector 存储系数可能更有意义。

如果你仔细观察,编译器可能会告诉你错误的行号。

【讨论】:

  • multiplication() 也有类似的问题:它也应该返回一个Poly 而不是int,顺便说一句,它应该是return c(目前它返回不见了)。
  • 它应该返回一些东西 :-) 我怀疑还有更多的问题潜伏着,但这是很多代码。
【解决方案2】:

编译器会告诉你确切的问题。 您的添加方法被声明为返回 int,而您的 var c 是类 Poly 的一个实例。 您需要返回一个int

【讨论】:

  • differentiate 函数呢?
  • 他更可能需要将函数返回类型更改为Poly
  • @Jashaszun 也有同样的问题。
  • @Jude Pereira - 谢谢。 如何纠正这个问题(我是 C++ 新手)?
  • @user3407254 您可以通过以下两种方式之一更正此问题:(1) 通过返回 int。例如,在您的 addition 方法中,您可以使用 return c.ord; 代替 return c;(或任何其他您想要的,只要它是 int)。 (2) 您声明您的方法返回 Poly 而不是 int
猜你喜欢
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多