使用虚函数C ++创建模具类

时间:2014-11-19 06:15:44

标签: c++ function virtual

我试图创建一个C ++程序,它包含一个虚拟滚动函数,它只返回1和边数之间的数字。我只启动了程序,我遇到了一个我从未见过的错误,也根本没有理解。我认为它是因为我没有正确实现虚函数,或者它可能是我在主类中调用虚函数的方式?但我完全不确定,我无法找出问题的解决方案。

Die.cpp

#include<iostream>
#include <cstdlib>
using namespace std;

class Die{
    public:
        Die();
        Die(int numSide);
        virtual int roll();
        int rollTwoDice(Die d1, Die d2); 

    private:
        int side;
};

Die::Die():side(6){}

Die::Die(int numSide):side(numSide){}

int Die::roll(){
    return rand() % side + 1;
}

int Die::rollTwoDice(Die d1, Die d2){
    return d1.roll()+d2.roll();
}

Main.cpp的

#include<iostream>
#include<time.h>
#include "Die.cpp"
using namespace std;

int main(){

    srand(time(NULL));  

    Die die();
    cout << die.roll;
    cout << die.roll;
    cout << die.roll;
}

错误:

/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status

我在linux命令行上用g ++ Die.cpp -o Die编译了这个。

1 个答案:

答案 0 :(得分:3)

您需要将Die.cpp拆分为包含Die.h块的头文件class Die { … };,并使用包含所有函数定义的Die.cpp文件。

然后,在构建时包含所有.cpp个文件,以便将它们链接在一起。

g++ Die.cpp Main.cpp -o Die

此外,这条线是“最令人头疼的解析”。你不能在这里使用parens:

Die die(); // should be Die die; (no parens)

相反,这一行缺少一个函数调用操作符:

cout << die.roll; // should be roll(); (with parens)