运行类时出错

时间:2014-06-05 01:58:45

标签: c++

您好我现在正在进行一些C ++研究,而且我似乎陷入了类。我做了这个程序,我需要得到一片披萨的价格。简单地说我还不想输入数据,只是已经有了静态数据。

代码就是这样:

#include <iostream>
#include <cmath>
using namespace std;

class Circle
{

public:

    Circle()
    {
        radius = 0;
        area = 0;


    }


    inline void setRadius(double r)
    {
         radius = r;
    }

    inline double getArea(double radius)
    {
        return 3.14 * pow(radius, 2);
    }

private:

    double radius;
    double area;`
};


class Pizza
{

private:


    double price;
    double size;
    double costperinch;
    Circle Object;


public:

    Pizza()
    {

        price = 0;
        size = 0;
        costperinch = 0;

    }

    ~Pizza();

    inline void setPrice(double p) 
    {
        price = p;
    }

    inline void setSize(double radius) 
    {
        size = Object.getArea(radius);

    }

    inline double costPeSqIn(double size, double price)
    {
        double costperinch = size * price;
    }

};


int main()
{

    Pizza myPizza;


    myPizza.setPrice(5.0);
    myPizza.setSize(3.14);

    cout << "The cost per square inch of the pizza is ";
    cout << myPizza.costPeSqIn(myPizza.setSize, myPizza.setPrice);

    return 0;
}

我收到以下错误:

  

错误1错误C3867:'Pizza :: setSize':函数调用缺少参数   列表;使用'&amp; Pizza :: setSize'创建指针   成员c:\ users \ jorge \ documents \ visual studio 2013 \ projects \ object   composition \ object composition \ main 7.21.cpp 91 1对象组合

     

错误2错误C3867:'Pizza :: setPrice':函数调用缺少参数   列表;使用'&amp; Pizza :: setPrice'来创建指针   成员c:\ users \ jorge \ documents \ visual studio 2013 \ projects \ object   composition \ object composition \ main 7.21.cpp 91 1对象组合

1 个答案:

答案 0 :(得分:6)

你的问题就在这一行

cout << myPizza.costPeSqIn(myPizza.setSize, myPizza.setPrice);

代码末尾。您的编译器会抱怨,因为setSizesetPrice是函数,但您没有为它们提供参数。我怀疑你是否想在任何方面做到这一点。

我其实认为你想拥有:

inline double costPeSqIn()
{
    return size * price;
}

作为costPeSqIn函数的实现,上面的行应该是

cout << myPizza.costPeSqIn();

这对我来说更有道理。


您当前将setter函数传递给costPeSqIn的方式没有意义,原始的costPeSqIn也声明了双返回类型,但没有返回任何内容。


至于析构函数的问题,你得到了:

~Pizza();

因此声明了析构函数。一旦你自己声明了一个析构函数,编译器就不会自动为你生成一个析构函数,但是因为你的代码生成不好,所以你没有任何定义。

要解决此问题,您必须提供它的定义,例如:

~Pizza()
{
    // whatever code you want
}

或删除声明,以便编译器为您自动生成默认构造函数。