小编noc*_*lux的帖子

Virtual Base类析构函数的"未定义引用"

可能重复:
什么是未定义的引用/未解析的外部符号错误,如何解决?

我有一些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

c++ abstract-class undefined-reference

27
推荐指数
1
解决办法
3万
查看次数

设计建议-返回子类时避免“无效的协变量返回类型”

我有以下情况:

我指定了一个纯虚函数:

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 ++中是行不通的,但是我真的很希望您提出关于最好做些什么的建议。我必须返回一个指针吗?我真的不想,因为我想要自动内存管理,但这是唯一的方法吗?

谢谢您的帮助!

c++ c++11

5
推荐指数
1
解决办法
866
查看次数

两个完全相同的界面:然而,不能把一个作为另一个?

我这样做是作为Java教程的一部分,所以它可能不是很难回答 - 但我很困难,所以感谢您的帮助!

我有以下问题:我有一个接口a和我作为教程的一部分下载的库,它采用类型a的(实现的)接口并在GUI中显示它.麻烦的是它没有编译; 日食说我必须施展它.当我这样做,它编译,但给我一个投射错误.

奇怪的是,两个接口都具有完全相同的代码.事实上,我复制并粘贴了我的库,但它仍然无法正常工作.

怎么可能这两个接口有相同的代码,但我不能演员?我的界面实现有什么问题?

如果您需要任何其他信息,请告诉我!

java interface

1
推荐指数
1
解决办法
835
查看次数

声明向量时神秘的malloc内存分配错误

这个错误使我完全神秘,我希望你能帮助我!我有一个具有结构向量的类(该结构称为粒子).我只是在编写一个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

c++ malloc vector

1
推荐指数
1
解决办法
1987
查看次数

将cast float与零比较时的奇怪行为

我目前正在尝试深入了解浮点表示,所以我玩了一下.在这样做的时候,我偶然发现了一些奇怪的行为; 我无法确定正在发生的事情,我会非常感激一些见解.抱歉,如果这已经得到解答,我发现谷歌很难!

#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)

基本上发生的事情是:

  • 我将minVal设置为可以使用单精度表示的最小浮点数
  • 除以2应该得到0 - 我们是最小的 …

c++ floating-point comparison

1
推荐指数
1
解决办法
93
查看次数

避免使用自定义类的初始化列表

我一直试图谷歌这个多年没有成功,所以我真的很感谢你的帮助!

我使用自定义类作为私有变量:

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()).

我想有两种解决方案:

  1. 我的不雅
  2. 为Location()指定默认构造函数

但是,我不喜欢第二个,因为我真的不想提出"默认位置".

我想我要问的是:有没有我不知道的第三种解决方案?我忽略了什么吗?

谢谢,一切顺利!

c++

1
推荐指数
1
解决办法
59
查看次数