我不希望这是我的第一篇文章,但我在这里不知所措。我在尝试编译程序时遇到这个错误(它应该只是找到矩形的区域和周长。)这是我的头文件。
#include <iostream>
using namespace std;
class Rectangle
{
public:
Rectangle(float Lngth=1, float Wdth = 1);
void setLngth(float Lngth);
void setWdth(float Wdth);
float getLngth(float Lngth);
float getWdth(float Wdth);
void Perimeter(float lngth, float wdth);
void Area(float lngth, float wdth);
private:
float Lngth;
float Wdth;
};
这是我的.cpp文件。
#include <iostream>
using namespace std;
#include "RealRectangle.h" // Employee class definition
Rectangle::Rectangle(float Lngth, float Wdth)
{
&Rectangle::setLngth;
&Rectangle::setWdth;
}
void Rectangle::setLngth(float Lngth)
{
if((Wdth > 0.0) && (Wdth < 20.0))
float wdth = Wdth;
else
cout<<"Invalid Width."<<endl;
}
float Rectangle::getLngth(float Lngth)
{
return Lngth;
}
void Rectangle::setWdth(float Wdth)
{
if((Wdth > 0.0) && (Wdth < 20.0))
float wdth = Wdth;
else
cout<<"Invalid Width."<<endl;
}
float Rectangle::getWdth(float Wdth)
{
return Wdth;
}
void Rectangle::Perimeter(float lngth, float wdth)
{
cout<<"The Perimeter is "<<(2*(lngth + wdth));
}
void Rectangle::Area(float lngth, float wdth)
{
cout<<"The Area is "<<(lngth * wdth);
}
这就是我一直遇到错误的地方。编译器告诉我添加一个&符号来创建指针,就像我在.cpp中所做的那样。但这会在它自己造成另一个错误。等等。我不确定我做错了什么。错误发生在第10行和第11行。
#include <iostream>
using namespace std;
#include "RealRectangle.h"
int main()
{
Rectangle rectangle1();
Rectangle rectangle2();
cout<<rectangle1.Perimeter();
cout<<rectangle2.Area();
}
答案 0 :(得分:2)
你已经遇到了被称为最令人烦恼的解析。
Rectangle rectangle1();
Rectangle rectangle2();
声明两个函数,而不是两个对象。做
Rectangle rectangle1;
Rectangle rectangle2;
此外,您应该将&Rectangle::setLngth
更改为函数调用。
答案 1 :(得分:1)
Rectangle :: Perimeter()和Rectangle :: Area()属于void
类型。他们不会退货。然而,您尝试使用其不存在的返回值并将其传递给cout
。
修改这两个函数,使它们返回一个值:
float Rectangle::Perimeter(float lngth, float wdth)
{
return 2 * (lngth + wdth);
}
float Rectangle::Area(float lngth, float wdth)
{
return lngth * wdth;
}
或修改你的main()函数来简单地调用这些函数,因为现在它们已经打印到cout
:
int main()
{
Rectangle rectangle1;
Rectangle rectangle2;
rectangle1.Perimeter();
rectangle2.Area();
}
但是你仍然有问题;这两个函数目前采用长度和宽度参数,我不认为这是你想要的。看来你想要的是获得矩形对象的周长和面积。所以你应该使用类变量来计算它。因此,请省略参数并使用您的私有数据成员:
float Rectangle::Perimeter()
{
return 2 * (Lngth + Wdth);
}
float Rectangle::Area()
{
return Lngth * Wdth;
}
不要忘记更新头文件中类声明中的函数签名,而不仅仅是cpp文件中的实现。
此外,构造函数不会正确委派初始化工作。函数调用的格式为function(arguments)
,而不是&function
。所以你需要这样做:
Rectangle::Rectangle(float Lngth, float Wdth)
{
setLngth(Lngth);
setWdth(Wdth);
}
最后,您的Rectangle
对象的声明被误解为函数原型:
Rectangle rectangle1();
Rectangle rectangle2();
编译器认为rectangle1
和rectangle2
是不带参数并返回Rectangle的函数。你应该省略括号:
Rectangle rectangle1;
Rectangle rectangle2;
我们还没有完成(上帝,这个程序有多少错误:-P)。您的setLngth
和setWdth
功能未按预期运行:
void Rectangle::setLngth(float Lngth)
{
if((Wdth > 0.0) && (Wdth < 20.0))
float wdth = Wdth;
else
cout<<"Invalid Width."<<endl;
}
好好看看它。特别是那句话float wdth = Wdth;
你的函数做了什么,取一个名为float
的{{1}}参数,然后检查Lngth
(私有变量)是否在范围内,如果它是,声明一个名为Wdth
的新的本地float
变量,并将其设置为与wdth
相同的值。
该函数根本不初始化私有变量Wdth
。您的Wdth
功能也是如此。你也应该修复它们。
答案 2 :(得分:0)
此:
Rectangle::Rectangle(float Lngth, float Wdth)
{
&Rectangle::setLngth;
&Rectangle::setWdth;
}
应该是这样的:
Rectangle::Rectangle(float Lngth, float Wdth)
{
setLngth(Lngth);
setWdth(Wdth);
}
而且:
Rectangle rectangle1();
Rectangle rectangle2();
应该是这样的:
Rectangle rectangle1;
Rectangle rectangle2;