im пытается создать программу C++ Die, которая содержит функцию виртуального ролика, которая просто возвращает число от 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
Я скомпилировал это с помощью g++ Die.cpp -o Die на командной строке linux.
Вам нужно разбить Die.cpp
на файл заголовка Die.h
, содержащий class Die { … };
block с файлом Die.cpp
содержащим все определения функций.
Затем .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)
#include
в .cpp
файл. Включаются только заголовочные файлы. Создайте Die.h
и убедитесь, что он находится в том же подкаталоге, что и другие файлы.