Użycie metody ze struktury w klasie


(Markossss) #1

Witam. Z racji że programowanie nie jest moją najmocniejszą stroną, a mam za zadanie stworzyć mini projekcik, muszę skorzystać z Waszej pomocy. Pierwsza część mojego zadania brzmi tak:

Create structure Task, cotaining the information about the test question in the fields: a question, five variants of the answer, a correct answer number, a number of points for a correct answer and method to display a question (struct with public data-members for simplicity, it can be defined inside next class).

Kod który napisałem:

​​​​​​​[code]#include
#include
#include
using namespace std;

class Test{
char guess; //będzie przyjmowało odpowiedź z klawiatury(a,b,c,d lub e)
int total; //będzie sumowało liczbę pkt z testu
vector questions;
void askQuestion();

};

struct Question
:public Test
{
string Question_Text; //pytanie
string answers[ 5 ]; // tablica na 5 odpowiedzi
char correct_answer; //wskazana prawidłowa odp w pytaniu
int Question_Score; //liczba pkt za prawidłową odpowiedź

Question( string q, string a1, string a2, string a3, string a4, string a5, char ca, int qs ) //konstruktor do dodawania pytań
{
Question_Text = q;
answers[ 0 ] = a1;
answers[ 1 ] = a2;
answers[ 2 ] = a3;
answers[ 3 ] = a4;
answers[ 4 ] = a5;
correct_answer = ca;
Question_Score = qs;
}

void showQuestion(); //deklaracja metody wyswietlajacej pytanie
};

void Question::showQuestion() //metoda wyswietlajaca pytanie
{
cout << “\n”;
cout << Question_Text << “\n”;
for( int i = 0; i < 5; i++ ) {
cout << answers[ i ];
cout << endl;
}
}

int main() {

Question t1( “1. Stolica Polski to:”,
“a. Warszawa”,
“b. Poznan”,
“c. Krakow”,
“d. Gdansk”,
“e. Torun”,
‘a’,
5 );
Question t2( “2. Stolica Polski to:”,
“a. Warszawa”,
“b. Poznan”,
“c. Krakow”,
“d. Gdansk”,
“e. Torun”,
‘a’,
5 );
Question t3( “3. Stolica Polski to:”,
“a. Warszawa”,
“b. Poznan”,
“c. Krakow”,
“d. Gdansk”,
“e. Torun”,
‘a’,
5 );

t1.showQuestion();
t2.showQuestion();

return 0;
}[/code]

Wszystko działa jak należy(wiem że przypisywanie na sztywno 5 odpowiedzi nie powinno mieć miejsca, ale nie będzie tutaj żadnych zmian, a kod ma wyglądać “słowo w słowo”, więc musiałem tak zrobić.

Kolejna część mojego zadania to:

To model a set of test questions, create the TestContent class, with data-member vector of test questions. Create constructors, set, get & print methods, methods to add and remove a test question(duplicate questions should not be included in the vector), method to access a test question by it’s index in the list of questions(vector), method to check if the answer of given question is correct

na początku skupiłem się na zdefiniowaniu struktury Question, w klasie Test…jak widać w powyższym kodzie zrobiłem to tak:

class Test{ char guess; //będzie przyjmowało odpowiedź z klawiatury(a,b,c,d lub e) int total; //będzie sumowało liczbę pkt z testu vector<string> questions; void askQuestion(); }; struct Question :public Test { //reszta kodu }

Wektor z pytaniami również stworzyłem(później tam będę dodawał). No i pomijając środek, na końcu mam zadanie aby stworzyć metodę która wyświetli pytanie i sprawdzi odpowiedź. Więc używając poprzedniej metody showQuestion ze struktury Task, chciałem jej użyć i dopisać pare linijek które będą miały na celu sprawdzenie odpowiedzi. Wygląda to tak:

Class Test{
    int guess;
    int total;
    vector<string> questions;
    void askQuestion();

};

//void Test::askQuestion()
//{
//    showQuestion();
//    cout << "Twoja odpowiedz to?" << "\n";
// cin >> guess;
// if( guess == correct_answer ) {
// cout << "\n";
// cout << "Dobrze!" << "\n";
// total = total + Question_Score;
// cout << "\n";
// cout << "Nacisnij enter aby kontynuować" << "\n";
// cin.get();
// cin.ignore();
// }
// else
// {
// cout << "\n";
// cout << "Niestety, zla odpowiedz" << "\n";
// cout << "Prawidlowa odpowiedź to: " << correct_answer << "." << "\n";
// cout << "\n";
// cout << "Nacisnij enter aby kontynuować" << "\n";
// cin.get();
// cin.ignore();
// 
// }
//}

Ale niestety to nie działa, wyskakują mi błędy:

In member function ‘void Test::askQuestion()’:
[Error] ‘showQuestion’ was not declared in this scope
[Error] ‘correct_answer’ was not declared in this scope
[Error] ‘Question_Score’ was not declared in this scope

że te rzeczy są nie zadeklarowane, ale przecież one są w strukturze Question…

Czy ktoś jest w stanie mi pomóc jak to rozwiązać?


(Fizyda) #2

Jest późno, mam niezły problem ze swoim kodem do tego jestem głodny więc wybacz ewentualną opryskliwość…

Zdefiniowałeś sobie klasę test w której wywołujesz metody z listy błędów, problem w tym że ta klasa nie posiada zdefiniowanych, ani zadeklarowanych owych metod.
Błąd jest w za komentowanym kodzie, to w tej części wywołujesz metody na rzecz obiektu klasy Test która to nie ma wywoływanych metod.