指向类的指针的C ++函数不起作用?

时间:2019-11-23 12:10:04

标签: c++ class pointers

我正在尝试使用Perlin噪声生成地形,以提高地形的质量,我想一次使用多种噪声。因此,我写了本该适合我的课程。以下是hpp和cpp文件:

#include "perlinNoise.hpp"

class MultiPerlinNoise: public PerlinNoise {
public:
    MultiPerlinNoise();

    std::vector<PerlinNoise*> perlinNoises;

    float octaveNoise(float x, float y);
};

cpp:

#include "multiPerlinNoise.hpp"

MultiPerlinNoise::MultiPerlinNoise():
PerlinNoise(0) {

}

float MultiPerlinNoise::octaveNoise(float x, float y) {
    float sum = 0.0f;

    for(int i = 0; i < perlinNoises.size(); i++)
        sum += perlinNoises[i]->octaveNoise(x, y);

    return sum;
}

PerlinNoise类是代码的包装,用于在Internet上发现八度危险噪声。看起来像这样:

#include "sivPerlinNoise.hpp"

class PerlinNoise {
public:
    PerlinNoise(unsigned int seed);

    float octaveNoise(float x, float y);

    float frequency;
    float multiplier;
    int octaves;
    unsigned int seed;
    float offset;

private:
    siv::PerlinNoise perlinNoise;
};

cpp:

#include "perlinNoise.hpp"

PerlinNoise::PerlinNoise(unsigned int seed):
perlinNoise(seed), frequency(2.0f), multiplier(1.0f), octaves(1), seed(seed), offset(0.0f) {

}

float PerlinNoise::octaveNoise(float x, float y) {
    return perlinNoise.octaveNoise(x / frequency, y / frequency, octaves) * multiplier + offset;
}

现在的问题是,当我将指向噪声的指针传递到map类中时,该函数始终返回0.0f。这就是我的地图类的构造函数的样子:

Map::Map(PerlinNoise *noise, Shader *shader, const RenderData *data):
noise(noise), shader(shader), data(data), texture("resources/textures/stones.png") {
    printf("%f\n", noise->octaveNoise(-(CHUNK_SIZE / 2.0f) + 0.0f, -(CHUNK_SIZE / 2.0f) + 0.0f));
    update(glm::vec3(0.0f));
}

当我不使用指向噪音的指针时,一切都会正常进行。 如何解决?

1 个答案:

答案 0 :(得分:1)

您需要将octaveNoise声明为虚拟的,以便可以通过继承类来覆盖该方法:

class MultiPerlinNoise: public PerlinNoise {
public:
    MultiPerlinNoise();

    std::vector<PerlinNoise*> perlinNoises;

    virtual float octaveNoise(float x, float y);
};