• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Użycie metody ze struktury w klasie

Object Storage Arubacloud
0 głosów
213 wizyt
pytanie zadane 7 czerwca 2017 w C i C++ przez Markosss Nowicjusz (190 p.)
edycja 7 czerwca 2017 przez Markosss
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:
#include <iostream> 
#include <string>
#include <vector>
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<string> 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;
}
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ć?

2 odpowiedzi

+1 głos
odpowiedź 7 czerwca 2017 przez niezalogowany
wybrane 7 czerwca 2017 przez Markosss
 
Najlepsza

Print methods ... (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)

Tutaj nie chodzi o dziedziczenie. Zrobiłeś wector stringów, a chcieli vector struktur. Myślę, że kod ma wyglądać raczej tak:

#include <iostream>
#include <string>
#include <vector>
using namespace std;


struct Task
{
    string question;
    string answers[ 5 ];
    char correct_answer;
    int question_score;

    Task( string q, string a1, string a2, string a3, string a4, string a5, char ca, int qs )
    {
        question = q;
        answers[ 0 ] = a1;
        answers[ 1 ] = a2;
        answers[ 2 ] = a3;
        answers[ 3 ] = a4;
        answers[ 4 ] = a5;
        correct_answer = ca;
        question_score = qs;
    }

    void showTask()
    {
        cout << "\n";
        cout << question << "\n";
        for( int i = 0; i < 5; i++ ) {
            cout << answers[ i ];
            cout << endl;
        }
    }
};

class TestContent
{
    char guess;
    int total;
    vector<Task> tasks;
    void askQuestion();

public:

    void addTask( const Task& t )
    {
        tasks.push_back(t);
    }

    void showQuestion(int it)
    {
        tasks[it].showTask();
    }
};




int main() {

    Task t1( "1. Stolica Polski to:",
    "a. Warszawa",
    "b. Poznan",
    "c. Krakow",
    "d. Gdansk",
    "e. Torun",
    'a',
    5 );
    Task t2( "2. Stolica Polski to:",
    "a. Warszawa",
    "b. Poznan",
    "c. Krakow",
    "d. Gdansk",
    "e. Torun",
    'a',
    5 );
    Task t3( "3. Stolica Polski to:",
    "a. Warszawa",
    "b. Poznan",
    "c. Krakow",
    "d. Gdansk",
    "e. Torun",
    'a',
    5 );


    TestContent test;
    test.addTask(t1);
    test.addTask(t2);
    test.addTask(t3);

    test.showQuestion(2);
    test.showQuestion(0);
    test.showQuestion(1);


    return 0;
}

PS. Używaj komentarza wieloliniowego:

/*
Ala
ma
kota
*/
komentarz 7 czerwca 2017 przez Markosss Nowicjusz (190 p.)
Jasne, mój błąd. Miałem zrobić wektor do stworzonej struktury, a ja źle doczytałem. Kodzik super chodzi, wielkie dzięki.
0 głosów
odpowiedź 7 czerwca 2017 przez Markosss Nowicjusz (190 p.)

Podziękowałem w komentarzu ;)

 

Mógłbym jeszcze poprosić żebyś mi ukazał jak mam stworzyć to: 
method to check if the answer of given question is correct. ​​​​​​ 
w klasie TestContest..

(wyżej już tą funkcje napisałem(pokazana jest w ostatnim kodzie), działa ona w stukturze(sprawdzałem), ale nie mogę jej użyć w klasie TestContest.

Bo ja sobie wyobraziłem że aby mieć metode do sprawdzania czy odpowiedź jest poprawna, najlepiej będzie użyć stworzonej już funkcji showTask ze struktury Task(żeby nie nadpisywać kodu do wyświetlania pytania), i dopisać pare linijek, użyć stworzonej zmiennej char guess i porównać z correct_answer...Ale nie wiem jak to dokładnie zrobić, bo mój przykład stworzony wyżej niestety nie działa.

komentarz 7 czerwca 2017 przez niezalogowany
edycja 7 czerwca 2017
void askQuestion(const int& it)
{
    tasks[it].showTask();
    cout << "Twoja odpowiedz to?" << "\n";
    cin >> guess;
    if( guess == tasks[it].correct_answer ) 
    // ...
}

W taki sposób możesz przerobić swoją metodę ;) 

Podobne pytania

0 głosów
1 odpowiedź 328 wizyt
pytanie zadane 1 sierpnia 2019 w C i C++ przez niezalogowany
+1 głos
2 odpowiedzi 385 wizyt
pytanie zadane 21 października 2021 w C# przez Kamirru9 Początkujący (300 p.)
+1 głos
0 odpowiedzi 81 wizyt

92,552 zapytań

141,399 odpowiedzi

319,534 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...