1
我正在編譯一個在android上使用SFML的程序。它通常在我用g ++編譯時編譯。當我在Android項目目錄中運行NDK建造我得到以下錯誤:對vtable SFML的未定義引用Android
/home/engineer/Desktop/android_ndk/android-ndk-r11c/toolchains/arm- linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9/../../../../arm-linux-androideabi/bin/ld: the vtable symbol may be undefined because the class is missing its key function (see go/missingkeymethod)
/home/engineer/Desktop/android/jni/SandJar.hpp:16: error: undefined reference to 'vtable for SandJar'
我有一個抽象類,罐和2類sandyJar和sandjar既繼承它。但是,我不明白它爲什麼編譯爲g ++,但不適用於ndk-build命令。 這裏有一些精簡的源文件(從主編譯):
Main.cpp的:
int main(int argc, char *argv[])
{
sf::RenderWindow window(sf::VideoMode::getDesktopMode(), "");
int WIDTH = window.getSize().x;
int HEIGHT = window.getSize().y;
vector<Jar*> jars;
SandJar SJAR(5,5,5,WIDTH, HEIGHT);
CandyJar CJAR(5,5,5,WIDTH, HEIGHT);
CJAR.add();
CJAR.move(120, 0);
jars.push_back(&CJAR);
jars.push_back(&SJAR);
etc.
}
Jar.hpp
class Jar
{
public:
virtual void add() = 0;
virtual void draw(sf::RenderWindow&) = 0;
virtual void update() = 0;
virtual void move(int,int) = 0;
virtual void setScale(float) = 0;
virtual void incAnim() = 0;
virtual void decAnim() = 0;
};
SandJar.hpp
class SandJar : public Jar
{
public:
//initializer
SandJar(const int, const int, const int, const int, const int);
SandJar(const int);
//function for adding candy
void add();
void update();
void draw(sf::RenderWindow&);
void incAnim();
void decAnim();
void move(int, int);
void setScale(float);
private:
//vars
};
SandJar.cpp
SandJar::SandJar(int Capacity){
}
SandJar::SandJar(int Width, int Height, int Capacity, int WindowW, int WindowH){
}
void SandJar::init() {
}
void SandJar::incAnim() {
}
void SandJar::decAnim() {
}
void SandJar::move(int x, int y)
{
}
void SandJar::setScale(float scl)
{
}
void SandJar::update() {
}
void SandJar::add() {
}
void SandJar::draw(sf::RenderWindow& window) {
}