我有这个家庭作业要做,我做了大部分代码,但我在main()
中有一个剩余的编译错误,我不明白。
这是作业:
定义一个名为BasicShape的抽象基类。 BasicShape类应具有以下成员(...)
定义一个名为Circle的类。它应该来自BasicShape类。 它应该有以下成员:
a)私人会员变量:radius(用于保持圆圈的双倍) 半径)
b)构造函数和公共成员函数:
- 圆圈(双a,字符串 n,double r):应该调用基类构造函数的构造函数 使用a初始化成员区域,并使用n命名。构造函数 还将使用r
设置成员半径的值- 油杉(): 重写功能(...)
- print():重写函数(...)
- 醇>
创建这些类后,创建一个测试程序 (...)
这是我的代码:
基本Shape.h
#ifndef BASICSHAPE_H
#define BASICSHAPE_H
#include <string>
class basicShape
{
public:
basicShape(const std::string &, double &);
double getArea() const;
virtual double calcArea() const = 0;
virtual void print()const;
std::string getname()const;
protected:
const double area;
private:
const std::string name;
};
#endif
Circle.h
#ifndef CIRCLE_H
#define CIRCLE_H
#include <string>
#include "Basic Shape.h"
using namespace std;
class Circle : public basicShape
{
public:
Circle(const string & n, double & a, double & r);
virtual double calcArea() const override;
virtual void print() const override;
private:
double radius;
};
#endif
Circle.cpp
#include <iostream>
#include "Circle.h"
#include<string>
using namespace std;
Circle::Circle(const string &n, double &a, double &r)
:basicShape(n,a)
{
radius = r;
calcArea();
}
double Circle::calcArea() const
{
double area;
area = 3.14159*radius*radius;
return area;
}
double basicShape::getArea() const
{
return area;
}
void Circle::print() const
{
cout << "radius:" << radius;
basicShape::print();
basicShape::getname();
}
Test.cpp的
#include <iostream>
#include "Basic Shape.h"
#include "Circle.h"
#include <string>
#include<vector>
using namespace std;
void poly(const basicShape * const);
int main()
{
Circle circle("Round",0.0,10.0);
vector< basicShape * > shapes(1);
for (const basicShape *basicshapePtr : shapes)
poly(basicshapePtr);
}
void poly(const basicShape * const baseClassPtr)
{
baseClassPtr->calcArea();
baseClassPtr->print();
}
以下是我在main中获得的编译错误:
"Circle::Circle(Circle Assignment 3 &&)': cannot convert argument 2 from 'double' to 'double &'
答案 0 :(得分:0)
问题
您尝试在此处构建新圈子:
Circle circle("Round",0.0,10.0);
但是你的构造函数有以下签名:
Circle(const string &n, double &a, double &r)
对于第二个和第三个参数,您使用对double值的引用。像这样通过引用传递意味着您可以更改引用的值。不幸的是,你传递了不变的文字。这是不允许的。
解决方案
使用const引用定义构造函数:
Circle(const string &n, const double &a, const double &r)
或传递值:
Circle(string n, double a, double r)
请注意,第二个选项似乎更受欢迎。而且我甚至建议你尊重作业中给出的签名,这样可以避免那些麻烦。
PS:对于将来的问题,请将问题减少到重现错误所需的最小元素,而不是发布完整的作业和完整的代码,其中大部分与错误无关