您好我现在正在进行一些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对象组合
答案 0 :(得分:6)
你的问题就在这一行
cout << myPizza.costPeSqIn(myPizza.setSize, myPizza.setPrice);
代码末尾。您的编译器会抱怨,因为setSize
和setPrice
是函数,但您没有为它们提供参数。我怀疑你是否想在任何方面做到这一点。
我其实认为你想拥有:
inline double costPeSqIn()
{
return size * price;
}
作为costPeSqIn
函数的实现,上面的行应该是
cout << myPizza.costPeSqIn();
这对我来说更有道理。
您当前将setter函数传递给costPeSqIn
的方式没有意义,原始的costPeSqIn
也声明了双返回类型,但没有返回任何内容。
至于析构函数的问题,你得到了:
~Pizza();
因此声明了析构函数。一旦你自己声明了一个析构函数,编译器就不会自动为你生成一个析构函数,但是因为你的代码生成不好,所以你没有任何定义。
要解决此问题,您必须提供它的定义,例如:
~Pizza()
{
// whatever code you want
}
或删除声明,以便编译器为您自动生成默认构造函数。