我试图创建一个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编译了这个。
答案 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)