Итак, я пытаюсь создать класс Die и класс LoadedDie, где находится класс Die и класс LoadedDie. Единственное отличие между двумя классами состоит в том, что функция roll в LoadedDie имеет 25% -ный шанс получить наибольшее число, тогда как у Die есть шанс 1/6. Это мой первый раз, когда мы работаем с производным классом, и у меня, похоже, есть проблема, пытающаяся выполнить эту задачу. Может кто-нибудь объяснить мне, как это работает, и показать мне, как я буду делать это с моими классами (как визуальный ученик и примеры необходимости). Я знаю, что мой базовый класс (Die) работает, когда я тестировал его, прежде чем переходить на мой LoadedDie.Создание производного класса в C++
Die.cpp
#include<iostream>
#include <cstdlib>
using namespace std;
class Die{
public:
Die();
Die(int numSide);
virtual int roll() const;
int rollTwoDice(Die d1, Die d2);
int side;
};
Die::Die():side(6){}
Die::Die(int numSide):side(numSide){}
int Die::roll() const{
return rand() % side + 1;
}
int Die::rollTwoDice(Die d1, Die d2){
return d1.roll()+d2.roll();
}
LoadedDie.cpp
#include<iostream>
#include <cstdlib>
#include "Die.cpp"
using namespace std;
class LoadedDie: public Die{
public:
LoadedDie();
LoadedDie(int numSide);
virtual int loadedroll() const;
};
LoadedDie::LoadedDie():side(6){}
LoadedDie::LoadedDie(int numSide):side(numSide){}
int LoadedDie::loadedroll() const{
if ((rand() % 2)+1) = 1){
return side;
}
return (rand() % (side-1)) + 1;
}
int LoadedDie::rollTwoDice(LoadedDie d1, LoadedDie d2){
return d1.roll()+d2.roll();
}
Мои DieTester.cpp (только главный класс, чтобы проверить, если вышеуказанные классы работают):
#include "LoadedDie.cpp"
#include<iostream>
#include<time.h>
#include <stdlib.h>
using namespace std;
int main(){
srand(time(NULL));
Die d(6);
LoadedDie dl(6);
cout << d.roll()<<endl;
cout<<"ld " << dl.roll()<<endl;
}
С классы выше, я получаю эту ошибку, когда я запускаю свой DieTester.cpp (если это помогает):
In file included from DieTester.cpp:1:
LoadedDie.cpp: In constructor ‘LoadedDie::LoadedDie()’:
LoadedDie.cpp:13: error: class ‘LoadedDie’ does not have any field named ‘side’
LoadedDie.cpp: In constructor ‘LoadedDie::LoadedDie(int)’:
LoadedDie.cpp:15: error: class ‘LoadedDie’ does not have any field named ‘side’
LoadedDie.cpp: In member function ‘virtual int LoadedDie::loadedroll() const’:
LoadedDie.cpp:18: error: expected primary-expression before ‘=’ token
LoadedDie.cpp:18: error: expected ‘;’ before ‘)’ token
Я считаю, что эти ошибки обусловлены тем, что я не правильно вывел классы. Может ли кто-нибудь объяснить мне, как это делается?
Именно поэтому вы разбиваете ** декларации ** в заголовочные файлы и ** определения ** в файлы cpp. Вы никогда не должны включать файл cpp в другой файл cpp. – CoryKramer
'#include" Die.cpp "неправильно. Отделите объявление класса к файлу заголовка и используйте соответствующий защитник. –
Кроме того, используйте некоторые защитные устройства, например '#pragma once'. И конструктор 'LoadedDie' должен построить его' Die', а не 'side'. –