我有一些Java经验,现在正在做C++课程.我想尝试编写一个界面,但是我遇到了一些我无法解决的析构函数问题,即使是在Internet上的帮助......这是我的代码:
class Force {
public:
virtual ~Force();
virtual VECTOR eval(VECTOR x, double t);
};
class InvSquare : public Force {
public:
InvSquare(double A) {
c = A;
}
~InvSquare(){};
VECTOR eval(VECTOR x, double t) { // omitted stuff }
private:
double c;
};
Run Code Online (Sandbox Code Playgroud)
我试图为基类声明一个虚拟析构函数,并为派生类声明一个非虚函数,但是我得到一个错误,说"未定义引用`Force :: ~Force()'".它是什么意思,我该如何解决?
如果这是一个愚蠢的问题,请原谅我!
非常感谢你的帮助,noctilux
我有以下情况:
我指定了一个纯虚函数:
virtual PredictedMatch PredictMatch(const Match &match) const = 0;
我也有:
class ImpactPredictedMatch : public PredictedMatch
现在,我想做:
ImpactPredictedMatch PredictMatch(const Match &match) const;
在实现较早版本的纯虚函数的类中。我以为编译器将根据需要简单地转换返回的类型,但是我得到:
impact_predictor.h:18:24: error: invalid covariant return type for ‘virtual ImpactPredictedMatch ImpactPredictor::PredictMatch(const Match&) const’
ImpactPredictedMatch PredictMatch(const Match &match) const;
我接受这在C ++中是行不通的,但是我真的很希望您提出关于最好做些什么的建议。我必须返回一个指针吗?我真的不想,因为我想要自动内存管理,但这是唯一的方法吗?
谢谢您的帮助!
我这样做是作为Java教程的一部分,所以它可能不是很难回答 - 但我很困难,所以感谢您的帮助!
我有以下问题:我有一个接口a和我作为教程的一部分下载的库,它采用类型a的(实现的)接口并在GUI中显示它.麻烦的是它没有编译; 日食说我必须施展它.当我这样做,它编译,但给我一个投射错误.
奇怪的是,两个接口都具有完全相同的代码.事实上,我复制并粘贴了我的库,但它仍然无法正常工作.
怎么可能这两个接口有相同的代码,但我不能演员?我的界面实现有什么问题?
如果您需要任何其他信息,请告诉我!
这个错误使我完全神秘,我希望你能帮助我!我有一个具有结构向量的类(该结构称为粒子).我只是在编写一个getter,它返回结构中某个字段的向量; 一次为一个名为x的字段,然后再为一个名为v的字段:
vector<double> x = s.getx();
vector<double> v = s.getv();
Run Code Online (Sandbox Code Playgroud)
出于某种原因,getx工作,但getv没有:它给了我"malloc():内存损坏:".
以下是getx和getv类:
vector<double> getx() {
vector<double> ret(number-2);
for(int i = 1; i < number; i++) {
ret[i-1] = masses[i].x;
}
return ret;
}
vector<double> getv() {
vector<double> ret(number-2);
for(int i = 1; i < number; i++) {
ret[i-1] = masses[i].v;
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
此行发生错误:
vector<double> ret(number-2);
Run Code Online (Sandbox Code Playgroud)
在getv.
我很困惑的原因是这两种方法基本相同!当我用常量替换(数字-2)时,我甚至得到相同的错误,例如4.它根本无法分配内存!
我希望你能看到我做错了什么......
非常感谢你的帮助,祝福,noctilux
我目前正在尝试深入了解浮点表示,所以我玩了一下.在这样做的时候,我偶然发现了一些奇怪的行为; 我无法确定正在发生的事情,我会非常感激一些见解.抱歉,如果这已经得到解答,我发现谷歌很难!
#include <iostream>
#include <cmath>
using namespace std;
int main(){
float minVal = pow(2,-149); // set to smallest float possible
float nextCheck = static_cast<float>(minVal/2.0f); // divide by two
bool isZero = (static_cast<float>(minVal/2.0f) == 0.0f); // this evaluates to false
bool isZero2 = (nextCheck == 0.0f); // this evaluates to true
cout << nextCheck << " " << isZero << " " << isZero2 << endl;
// this outputs 0 0 1
return 0;
}
Run Code Online (Sandbox Code Playgroud)
基本上发生的事情是:
我一直试图谷歌这个多年没有成功,所以我真的很感谢你的帮助!
我使用自定义类作为私有变量:
private:
Location SWCorner;
Location NECorner;
Run Code Online (Sandbox Code Playgroud)
在包含Location对象的类的构造函数中,我必须在初始化列表中为它赋值:
Territory::Territory(Location InitialPosition) : NECorner(InitialPosition), SWCorner(InitialPosition) {
this->NECorner = Location(InitialPosition.getX() + 1, InitialPosition.getY() + 1);
this->SWCorner = Location(InitialPosition.getX() - 1, InitialPosition.getY() - 1);
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在做的是将其初始化为某个值,然后立即重新分配该值.这对我来说似乎很难看.我真的很想做:
Territory::Territory(Location InitialPosition) {
this->NECorner = Location(InitialPosition.getX() + 1, InitialPosition.getY() + 1);
this->SWCorner = Location(InitialPosition.getX() - 1, InitialPosition.getY() - 1);
}
Run Code Online (Sandbox Code Playgroud)
但是这会抛出一个错误(没有匹配函数调用Location()).
我想有两种解决方案:
但是,我不喜欢第二个,因为我真的不想提出"默认位置".
我想我要问的是:有没有我不知道的第三种解决方案?我忽略了什么吗?
谢谢,一切顺利!