【发布时间】:2019-12-05 02:24:40
【问题描述】:
我一直在四处寻找是否有人与我有类似的问题,但我找不到任何东西。我提示用户输入他们希望删除的行星的名称。我的函数将定位行星在矢量对象中的位置。
这个函数的目的是根据我通过函数参数传递的位置删除一个对象。
行星类
class Planet {
private:
string name;
double diameter;
double mass;
public:
const double G = 6.67408e-11;
void setName(string n);
bool setDiameter(double d);
bool setMass(double m);
string getName();
double getDiameter();
double getMass();
double CalcSa();
double CalcV();
double CalcDensity();
double CalcG();
string InputS(string x);
double InputD(string x);
Planet();
};
double ReadDouble(double input) {
//Verifys that that user entered in a correct number
while (cin.fail() != 0) {
cerr << "Enter a valid number: ";
cin.clear();
cin.ignore(255, '\n');
cin >> input;
}
return input;
}
string Planet::InputS(string x) {
string user_input;
cout << x;
cin >> user_input;
return user_input;
}
double Planet::InputD(string x) {
double user_input;
cout << x;
cin >> user_input;
user_input = ReadDouble(user_input);
return user_input;
}
Planet::Planet() {
name;
diameter = 0.0;
mass = 0.0;
}
void Planet::setName(string n) {
name = n;
}
bool Planet::setDiameter(double d) {
bool rv = false;
if (d > 0.0) {
rv = true;
diameter = d;
}
return rv;
}
bool Planet::setMass(double m) {
bool rv = false;
if (m > 0.0) {
rv = true;
mass = m;
}
return rv;
}
string Planet::getName() {
return name;
}
double Planet::getMass() {
return mass;
}
double Planet::getDiameter() {
return diameter;
}
double Planet::CalcSa() {
double sa = 4.0 * M_PI * pow((diameter / 2.0), 2.0);
return sa;
}
double Planet::CalcV() {
double v = (4.0 / 3.0) * M_PI * pow((diameter / 2.0), 3.0);
return v;
}
double Planet::CalcDensity() {
double den = mass / CalcV();
return den;
}
double Planet::CalcG() {
double r = diameter / 2.0;
double grav = (G * mass) / (pow(r, 2.0));
return grav;
}
我的问题在于这行代码:
l.erase(l.begin() + n);
void DeleteVector(vector<Planet>& l, int n) {
if (int len = l.size() > 0) {
cout << l[n].getName() << " was removed from the list.\n";
l.erase(l.begin() + n);
}
}
我传入行星的向量,这是一个类。然后我传入我希望从对象向量中删除的位置“n”。
我收到以下错误:
Error C2280 'Planet &Planet::operator =(const Planet &)': attempting to reference a deleted function
任何帮助或指导将不胜感激。
【问题讨论】:
-
class Planet的某些内容(未显示)导致无法重新分配对象,而vector<Planet>需要在删除对象时将其元素移动到内存中。 -
@aschepler 我用我的班级行星更新了帖子
-
const double G = 6.67408e-11;consts 无法重新分配。如果此const在实例之间没有变化,请考虑将其设为static const。 -
我没有将其添加到我的答案中,因为它与问题无关,但
if (int len = l.size() > 0)可能既不是你认为的那样,也不会做你认为的那样反正感觉。如果l.size()大于0,它将分配1到len,否则它将分配0到len。然后它将检查len是否非零,如果是,则输入 if-body。基本上它只是检查l是否为空。你可能想要if (n < l.size())。