Ir ao conteúdo
  • Cadastre-se

Joanderson Pereira

Membros Juniores
  • Total de itens

    17
  • Registro em

  • Última visita

  • Qualificações

    N/D
  1. Para mim você não foi muito claro em como usar o cin.ignore(), tive que pesquisar e descobri que era para adicionar ele logo abaixo do "cin >> restart;": cin >> restart; cin.ignore(); Resolveu o problema, agora outra coisa que quero alterar no código é : while ( restart != 'y' || restart != 'n' ) { if ( restart == 'n' ){ again = 'n'; cout << "Thanks for playing!!"; playerAlive = false; return 0; break; } if ( restart == 'y') { playerAlive = true; zombiesKilled = 0; zombieCount = 0; skinnyZombie = false; hugeZombie = false; deathlyZombie = false; break; } else { cout << "Please insert a valid character! \n"; cin >> restart; cin.ignore(); } } Quando o usuário digita qualquer tecla que não seja 'y' ou 'n' o else é ativado exibindo a mensagem "Please insert a valid character!". Porém se ao invés de apenas um caractere o usuário digitar (shampu) uma palavra de 6 letras, 6 mensagens serão exibidas na tela, uma para cada letra que não for 'y' ou 'n'. Como corrigir isso para que não importando o número de caracteres usuário digitar apenas uma mensagem de alerta seja exibida na tela?
  2. Sou iniciante em C++, fiz esse código a caráter de estudo, o programa pede o nome do usuário (playerName) e um número inteiro (zombieCount), e enquanto playerAlive for verdadeiro o zombieCount define o número de rodadas e em cada rodada dois números aleatórios (createZombie, chance) são gerados definindo texto que será mostrado para o usuário e realizando ou não alterações nos int (playerScore, playerSkill, zombieSkill, zombiesKilled).  No fim são exibidos os int (zombiesKilled, playerScore) e a string playerName. E o programa pode reiniciar caso o usuário tecle 'y'. O porém é que quando o programa reinicia ele ignora o "Press [ENTER] to start.". Exibindo ele concatenado com o próximo texto: Press [ENTER] to start.Please enter your name:. Gostaria que quando o loop for feito o programa esperasse o usuário teclar o enter para prosseguir com a aplicação. Suspeito que quando o usuário tecla "y + ENTER]" para reiniciar o programa esse Enter vai parar no char temp, gerando esse erro. #include <iostream> #include <stdlib.h> #include <unistd.h> #include <time.h> #include <windows.h> using namespace std; int wait = 180; int createZombie() { if (rand() % 67 > 65) { return 21; } if (rand() % 67 < 10) return 11; else return rand() %10 + 1; } int chance() { return rand() % 100; } int main() { srand(time(NULL)); char again; // game stats int playerAlive = true; int playerSkill = 9; int playerScore = 1; string playerName = ""; int zombieCount = 0; int zombiesKilled = 0; again = 'y'; int revive = false; char restart; int deathlyZombie = false; int hugeZombie = false; int skinnyZombie = false; while (again == 'y') { // title cout << "Welcome to Zombie War 1.0" << endl << "Press [ENTER] to start."; char temp = 'x'; while (temp != '\n') cin.get(temp); // player name cout << "Please enter your name: "; cin >> playerName; //ask how many zombies cout << "How many zombies do you wish to fight? "; cin >> zombieCount; cout << "Get ready to fight for your life, " << playerName << "!" << endl; // main game loop while (playerAlive && zombiesKilled < zombieCount) { // create a random zombie int zombieSkill = createZombie(); int luck = chance(); // battle sequence if (zombieSkill > 20) { cout << endl << "Here comes a deathly warrior zombie!!!" << endl; deathlyZombie = true; Sleep (wait); } else { if (zombieSkill > 10 && zombieSkill < 20) { cout << endl << "Here comes a huge zombie!" << endl; hugeZombie = true; Sleep (wait); } else { cout << endl << "Here comes zombie " << zombiesKilled + 1 << endl; skinnyZombie = true; Sleep (wait); } } cout << "Fighting"; Sleep (wait / 2); cout << "." ; Sleep (wait / 2); cout << "." ; Sleep (wait / 2); cout << "." << endl; Sleep(2000); //balance if (playerSkill > 50 && luck < 50) { zombieSkill = zombieSkill + 40; playerSkill = playerSkill - 1; cout << "The battle is so hard..." << endl; Sleep (2 * wait); } if (playerSkill > 100 && luck < 20) { zombieSkill = zombieSkill + 90; cout << "You keep fighting, but the end is coming..." << endl; Sleep (2 * wait); } if (zombieCount > 100 && luck < 10) { playerSkill = playerSkill - 10; cout << "You suffer from accumulated fatigue..."; Sleep (2 * wait); } if (skinnyZombie == true) { //events if (luck < 5 && playerSkill > 12) { zombieSkill = zombieSkill * 2; zombieCount = zombieCount + 1; cout << "Two zombies appeared this time!!" << endl; Sleep (wait); } if ( luck > 60 && playerSkill > 40) { playerSkill = playerSkill + 1; cout << "Your hatred for zombies gave you strength." << endl; Sleep (wait); } if ( luck > 70 && zombieCount > 10 ) { playerSkill = playerSkill + 1; cout << "The pain you feel increases your focus!!" << endl; Sleep (wait); } if ( luck < 3 ) { playerSkill = playerSkill - 2; cout << "The zombie goes into frenzy!!" << endl; Sleep (wait); } if ( luck < 10 && zombieSkill > 8 ) { cout << "The zombie bit your ear" << endl; Sleep (wait); } if ( playerSkill > zombieSkill ) { skinnyZombie = false; } } if (hugeZombie == true) { if (luck < 30 && playerScore < 50) { cout << endl << "He eats your arm!" << endl; playerSkill = playerSkill -3; Sleep (wait); } if (luck > 85) { zombieSkill = zombieSkill - 4; cout << "You got a critical hit!!" << endl; Sleep (wait); cout << "The zombie became blind!" << endl; Sleep (wait); } if (luck > 80 && playerSkill > 20) { zombieSkill = zombieSkill - 2; cout << "You cut off the zombie's hands!!" << endl; Sleep (wait); } if (luck < 10) { zombieSkill = zombieSkill + 2; cout << "The zombie kick your face!!" << endl; Sleep (wait); } if (luck > 80 && playerSkill < 11) { zombieSkill = zombieSkill - 2; cout << "The zombie grabbet you!" << endl; Sleep (wait); cout << "You broke free with a butt in the zombie." << endl; Sleep (wait); } if (luck > 98) { playerSkill = playerSkill + 5; cout << "You found a rifle!!" << endl; Sleep (wait); } if (playerSkill > zombieSkill) { hugeZombie = false; } } if (deathlyZombie == true) { if (luck < 20 ) { zombieSkill = zombieSkill + 2; playerSkill = playerSkill -2; cout << "The zombie break your leg!!" << endl; Sleep (wait); cout << "He threw you on the ground like it was nothing" << endl; Sleep (wait); } if (luck > 20 ) { zombieSkill = zombieSkill + 1; cout << "You got away with a blow." << endl; Sleep (wait); cout << "He predicted yours movements!!" << endl; Sleep (wait); } if (playerSkill > 20 && luck > 80) { playerSkill = playerSkill +2; cout << "You still have not given up hope."; Sleep (wait); } if (playerSkill > zombieSkill) { cout << "The deathly warrior zombie will remember you" << endl; deathlyZombie = false; Sleep (wait); } } if (hugeZombie == true || deathlyZombie == true) { if (luck > 85) { playerSkill = playerSkill +1; zombieSkill = zombieSkill -1; cout << endl << "The zombie tries to grab you."; Sleep (wait); cout << endl << "You dodge and knock him down"<< endl; Sleep (wait); } if ( luck > 10 && luck < 20 ) { cout << "You lost one of yours tooth!" << endl; Sleep (wait); } } if (luck > 50) { if (luck > 85 && zombieSkill < 30) { playerSkill = playerSkill + 1; cout << "You ate some cookies! " << endl; Sleep (wait); } if (luck > 99 && playerSkill > 30) { revive = true; cout << "You found a mysterious red ring!!" << endl; Sleep (3 * wait); } if (luck > 92 && zombieCount > 10) { zombieSkill = zombieSkill - 2; playerSkill = playerSkill + 1; cout << endl << "You cut off his leg!! " << endl; Sleep (wait); cout << "You found some bandage!" << endl; Sleep (wait); } } if (luck < 5) { zombieSkill = zombieSkill + 2; cout << "The zombie has a sword!" << endl; Sleep (wait); } Sleep (wait); //zombie killed the player if (playerSkill < zombieSkill) { playerAlive = false; cout << "You have died." << endl; Sleep (5 * wait); if (revive == true) { playerAlive = true; cout << "The mysterious red ring revive you!!" << endl; Sleep (wait); cout << "The ring became useless!!" << endl; Sleep (wait); } } // player killed the zombie else { if (playerSkill - zombieSkill > 11){ cout << "You blew the zombie's head!"<< endl; playerScore = playerScore + 1; Sleep (2 * wait); } if (playerSkill - zombieSkill > 7 && playerSkill - zombieSkill < 12) { cout << "You wasted the zombie!" << endl; playerScore = playerScore + 2; Sleep (2 * wait); } if (playerSkill - zombieSkill > 5 && playerSkill - zombieSkill < { cout << "You decapitated the zombie!" << endl; playerScore = playerScore + 3; Sleep (2 * wait); } if (playerSkill - zombieSkill > 2 && playerSkill - zombieSkill < 6 ) { cout << "You killed the zombie!" << endl; playerScore = playerScore + 4; Sleep (2 * wait); } if (playerSkill > zombieSkill && zombieSkill > 10 && zombieSkill <20) { playerScore = playerScore + 5; Sleep (2 * wait); } if (playerSkill > zombieSkill && zombieSkill > 20) { playerScore = playerScore + 20; Sleep (2 * wait); } else if (playerSkill - zombieSkill < 3){ cout << "You killed the zombie, but suffered injuries." << endl; playerSkill = playerSkill - 1; Sleep (2 * wait); } zombiesKilled++; } cout << endl; Sleep (3000); } // end game if (zombiesKilled == zombieCount) { // victory cout << "You have survived the onslaught! \n" << "Congratulations " + playerName + "!" << endl; } else { // lost cout << "You did not survive the zombie war. \n" << "Try to come back stronger next time " + playerName + "!" << endl; } Sleep (wait); cout << "Zombies killed: " << zombiesKilled << endl; cout << "Your power this round: " << playerSkill << endl; cout<< "Final score: " << playerScore << endl << endl; cout << "Do you wanna play again? y/n" << endl; cin >> restart; while ( restart != 'y' || restart != 'n' ) { if ( restart == 'n' ){ again = 'n'; cout << "Thanks for playing!!"; playerAlive = false; return 0; break; } if ( restart == 'y') { playerAlive = true; zombiesKilled = 0; zombieCount = 0; skinnyZombie = false; hugeZombie = false; deathlyZombie = false; break; } else { cout << "Please insert a valid character! \n"; cin >> restart; } } } return 0; }
  3. Sou iniciante em C++, fiz esse código a caráter de estudo, o programa pede o nome do usuário (playerName) e um número inteiro (zombieCount), e enquanto playerAlive for verdadeiro o zombieCount define o número de rodadas e em cada rodada dois números aleatórios (createZombie, chance) são gerados definindo texto que será mostrado para o usuário e realizando ou não alterações nos int (playerScore, playerSkill, zombieSkill, zombiesKilled). No fim são exibidos os int (zombiesKilled, playerScore) e a string playerName. E o programa pode reiniciar caso o usuário tecle 'y'. Enfim, gostaria de dividir esse código em algumas classes se possível, porém não sei por onde começar... Segue em anexo o código #include <iostream> #include <stdlib.h> #include <unistd.h> #include <time.h> #include <windows.h> using namespace std; int wait = 170; int createZombie() { if (rand() % 67 > 65) { return 21; } if (rand() % 67 < 10) return 11; else return rand() %10 + 1; } int chance() { return rand() % 100; } int main() { srand(time(NULL)); char again; // game stats int playerAlive = true; int playerSkill = 9; int playerScore = 1; string playerName = ""; int zombieCount = 0; int zombiesKilled = 0; again = 'y'; while (again == 'y') { // title cout << "Welcome to Zombie War 1.3" << endl << "Press [ENTER] to start."; cin.get(); // player name cout << "Please enter your name:"; cin >> playerName; //ask how many zombies cout << "How many zombies do you wish to fight? "; cin >> zombieCount; cout << "Get ready to fight for your life, " << playerName << "!" << endl; // main game loop while (playerAlive && zombiesKilled < zombieCount) { // create a random zombie int zombieSkill = createZombie(); int luck = chance(); // battle sequence if (zombieSkill > 20) { cout << endl << "Here comes a warrior deathly zombie!!!" << endl; Sleep (wait); } else { if (zombieSkill > 10 && zombieSkill < 20) { cout << endl << "Here comes a huge zombie!" << endl; Sleep (wait); } else { cout << endl << "Here comes zombie " << zombiesKilled + 1 << endl; Sleep (wait); } } cout << "Fighting..." << endl; Sleep(2000); //droping itens if (luck > 80) { playerSkill = playerSkill + 1; cout << "You ate some cookies! " << endl; Sleep (wait); } if (luck > 98 && zombieSkill > 10) { playerSkill = playerSkill + 5; cout << "You found a rifle!!" << endl; Sleep (wait); } if ( luck > 60 && zombieSkill < 5) { playerSkill = playerSkill + 1; cout << "Your hatred for zombies gave you strength." << endl; Sleep (wait); } if ( luck > 70 && zombieSkill < 11 && playerScore > 3) { playerSkill = playerSkill + 1; cout << "The pain you feel increases your focus!!" << endl; Sleep (wait); } if ( luck < 3 && zombieSkill < 6) { playerSkill = playerSkill - 2; cout << "The zombie goes into frenzy!!" << endl; Sleep (wait); } if (luck < 5) { zombieSkill = zombieSkill + 2; cout << "The zombie has a sword!" << endl; Sleep (wait); } if (luck > 91) { zombieSkill = zombieSkill - 2; playerSkill = playerSkill + 1; cout << endl << "You cut off his leg!! "; Sleep (wait); cout << "You found some bandage!" << endl; } if (zombieSkill > 10 && zombieSkill < 20 && luck < 35) { cout << endl << "He eats your arm!" << endl; playerSkill = playerSkill -1; Sleep (wait); } if (zombieSkill > 10 && zombieSkill < 20 && luck > 85) { playerSkill = playerSkill +1; zombieSkill = zombieSkill -1; cout << endl << "The zombie tries to grab you."; Sleep (wait); cout << endl << "You dodge and knock him down"<< endl; Sleep (wait); } if (zombieSkill > 11 && luck > 85) { zombieSkill = zombieSkill - 4; cout << "You got a critical hit!!" << endl; Sleep (wait); cout << "The zombie became blind!" << endl; Sleep (wait); } if (zombieSkill > 9 && luck > 80 && playerSkill < 11) { zombieSkill = zombieSkill - 2; cout << "The zombie grabbet you!" << endl; Sleep (wait); cout << "You broke free with a butt in the zombie." << endl; Sleep (wait); } if (zombieSkill > 20 && luck < 20 ) { zombieSkill = zombieSkill + 2; cout << "The zombie break your leg!!" << endl; Sleep (wait); cout << "He threw you on the ground like it was nothing" << endl; Sleep (wait); } Sleep (wait); //events if ( luck < 20 ) { cout << "You lost one of yours tooth!" << endl; Sleep (wait); } if ( luck < 10 && zombieSkill < 10) { cout << "The zombie bit your ear" << endl; Sleep (wait); } Sleep (wait); //zombie killed the player if (playerSkill < zombieSkill) { playerAlive = false; cout << "You have died." << endl; } // player killed the zombie else { if (playerSkill - zombieSkill > 11){ cout << "You blew the zombie's head!"<< endl; playerScore = playerScore + 1; Sleep (2 * wait); } if (playerSkill - zombieSkill > 7 && playerSkill - zombieSkill < 12) { cout << "You wasted the zombie!" << endl; playerScore = playerScore + 2; Sleep (2 * wait); } else if (playerSkill - zombieSkill > 5 && playerSkill - zombieSkill < { cout << "You decapitated the zombie!" << endl; playerScore = playerScore + 3; Sleep (2 * wait); } else if (playerSkill - zombieSkill > 0 && playerSkill - zombieSkill < 6 ) { cout << "You killed the zombie!" << endl; playerScore = playerScore + 4; Sleep (2 * wait); } else if (playerSkill > zombieSkill && zombieSkill > 10 && zombieSkill <20) { playerScore = playerScore + 5; Sleep (2 * wait); } else if (playerSkill > zombieSkill && zombieSkill > 20) { playerScore = playerScore + 20; Sleep (2 * wait); } else { cout << "You killed the zombie, but suffered injuries." << endl; playerSkill = playerSkill - 1; Sleep (2 * wait); } zombiesKilled++; } cout << endl; Sleep (3000); } // end game if (zombiesKilled == zombieCount) { // victory cout << "You have survived the onslaught! \n" << "Congratulations " + playerName + "!" << endl; } else { // lost cout << "You did not survive the zombie war. \n" << "Try to come back stronger next time " + playerName + "!" << endl; } Sleep (wait); cout << "Zombies killed: " << zombiesKilled << endl; cout<< "Final score: " << playerScore << endl << endl; cout << "Do you wanna play again? y/n" << endl; cin >> again; if ( again != 'y'){ break; } else { playerAlive = true; zombiesKilled = 0; zombieCount =0; } } return 0; } Game.rar
  4. Sou iniciante em Java, pretendo fazer um programa capaz de efetuar a adição/subtração/multiplicação/divisão de dois números fornecidos pelo usuário conforme a operação desejada. Na parte em que o usuário digita o operador, optei por guardá-lo em uma string para tentar validar com "if". // Quest1.java exibe um número que o usuário digitar na tela import java.util.Scanner; public class Quest2 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Scanner scanner2 = new Scanner(System.in); Scanner scanner3 = new Scanner (System.in); //Entrada System.out.println("Seja Bem vindo ao Java Calculator"); System.out.println("Digite um número"); double n1 = scanner.nextDouble(); System.out.println("Digite outro número"); double n2 = scanner2.nextDouble(); //Processamento double r1 = n1 + n2; double r2 = n1 - n2; double r3 = n1 * n2; double r4 = n1 / n2; System.out.println("Agora digite um operador correspondente a operação desejada: " + "Adição +, Subtração -, Multiplicação *, Divisão /"); String op1 = scanner3.nextLine(); //Saída if ( op1 == "+") System.out.println("A soma deles é :" + r1 ); if (op1 == "/") System.out.println("O quociente deles é :" + r4 ); if (op1 == "*") System.out.println("O produto deles é :" + r3 ); if (op1 == "-") System.out.println("A subtração deles é :" + r2 ); else { System.out.println("Digite um operador válido!"); } Porém na saída apenas else é exibida, o programa não foi capaz de reconhecer que a string recebida estava igual. Alguém alma caridosa pode me socorrer?
  5. Passei a usar o eclipse e o código rodou de boas. Fiz as alterações que precisava no main e no GradeBook.cpp, praticamente courseTutor é courseName com outro nome. Agradeço por ter sanado minhas dúvidas. Que Jesus esteja com você. Main // Figura 3.17: fig03_17.cpp // Cria e manipula um objeto GradeBook; ilustra a validação. using namespace std; #include <iostream> #include "GradeBook.hpp" // inclui a definição de classe GradeBook // a função main inicia a execução do programa int main() { // cria dois objetos GradeBook; // nome inicial de curso de gradeBook1 é muito longo GradeBook *gradeBook1 = new GradeBook( "CS101 Introduction to Programming in C++", "Matheo Ruan" ); GradeBook *gradeBook2 = new GradeBook( "CS102 C++ Data Structures","Michelangelo Lindo" ); gradeBook1->displayMessage(); gradeBook2->displayMessage(); // exibe courseName de cada GradeBook cout << "\ngradeBook1's initial course name is:" << gradeBook1->getCourseName() << "\ngradeBook2's initial course name is: " << gradeBook2->getCourseName() << "\ngradeBook1's initial tutor name is: " << gradeBook1->getCourseTutor() << "\ngradeBook2's initial tutor name is: " << gradeBook2->getCourseTutor() << endl; // modifica courseName do myGradeBook (com uma string de comprimento válido) gradeBook1->setCourseName( "CS101 C++ Programming" ); gradeBook2->setCourseTutor( "Michelangelo"); // exibe courseName de cada GradeBook cout << "\ngradeBook1's course name is: " << gradeBook1->getCourseName() << "\n This course is present by: " << gradeBook1->getCourseTutor() << "\ngradeBook2's course name is: " << gradeBook2->getCourseName() << "\n This course is present by: " << gradeBook2->getCourseTutor() << endl; delete gradeBook1; delete gradeBook2; return 0; // indica terminação bem-sucedida } // fim de main // Figura 3.16: GradeBook.cpp // Implementações das definições de função-membro de GradeBook. // A função setCourseName realiza a validação. #include <iostream> #include <string> using std::cout; using std::endl; #include "GradeBook.hpp" // inclui a definição de classe GradeBook // construtor inicializa courseName com String fornecido como argumento GradeBook::GradeBook() { } GradeBook::GradeBook ( string name, string tutor ) // fim do construtor GradeBook : courseName (name), courseTutor (tutor) { setCourseName (name); setCourseTutor (tutor); } // função que configura o nome do curso; // assegura que o nome do curso tenha no máximo 25 caracteres void GradeBook::setCourseName( string name ) { if ( name.length() <= 25 ) // se o nome tiver 25 ou menos caracteres this->courseName = name; // armazena o nome do curso no objeto if ( name.length() > 25 ) // se o nome tiver mais de 25 caracteres { // configura courseName como os primeiros 25 caracteres do parâmetro name this->courseName = name.substr( 0, 25 ); // inicia em 0, comprimento de 25 cout << "Name \'" << name << "\" exceeds maximum length (25).\n" << "Limiting courseName to first 25 characters.\n" << endl; } // fim do if } // fim da função setCourseName // função para obter o nome do curso string GradeBook::getCourseName() { return this->courseName; // retorna courseName do objeto } // fim da função getCourseName void GradeBook::setCourseTutor (string tutor) { if (tutor.length() <= 15 ) this->courseTutor = tutor; if (tutor.length() > 15 ) { this->courseTutor = tutor.substr(0 , 15); cout << endl; cout << "Name \"" << tutor << "\" exceeds maximum length 15.\n" << "Limiting courseTutor to first 15 characters. \n" << endl; } } string GradeBook::getCourseTutor() { return courseTutor; } void GradeBook::displayMessage() { // chama getCourseName para obter o courseName cout << "Welcome to the grade book for\n" << getCourseName() << "!" << endl; // exibe uma mensagem de boas-vindas para o usuário GradeBook // chama getCourseTutor para obter o courseTutor cout << "This course is presented by: "<< getCourseTutor() << "!" << endl; }; // fim da função displayMessage // Figura 3.15: GradeBook.hpp // Definição de classe GradeBook apresenta a interface public da // classe. Definições de função-membro aparecem em GradeBook.cpp. #pragma once #include <string> // o programa utiliza classe de string padrão do C++ using std::string; // definição da classe GradeBook class GradeBook { public: GradeBook( ); // construtor que inicializa um objeto GradeBook GradeBook (string name, string tutor); void setCourseName( string name ); // função que configura o nome do curso void setCourseTutor( string tutor ); string getCourseName(); // função que obtém o nome do curso string getCourseTutor(); void displayMessage(); // função que exibe uma mensagem de boas-vindas private: string courseName; // nome do curso para esse GradeBook string courseTutor; string name; string tutor; }; // fim da classe GradeBook
  6. Desculpe a demora, agradeço a ajuda, fiquei tão preocupado em adiciona novos parâmetros que esqueci de chama-los na função main, o código foi bastante explicador para mim, gostaria de pedir explicações sobre o uso de "->" ao invés do "." e sobre a declaração do construtor no reader. O código não rodou no Dev c++ apresentando o erro :C:\Users\Gatão\Documents\collect2.exe [Error] ld returned 1 exit status
  7. Aqui temos a classe GradeBook. 1- Ela possui a string courseName e as funções-membros setCourseName, getCourseName e displayMessage (que permitem, respectivamente, configurar o nome do curso, obter o nome do curso e exibir uma mensagem de boas-vindas). 2- O objetivo é criar a string courseTutor e as funções-membros setCourseTutor, getCourseTutor (que permitem configurar o nome do instrutor e obter o nome do instrutor). E isso dentro da mesma classe GradeBook. Com certeza tem muitos erros no código em relação a declaração de parâmetros e algumas outras coisas, sinceramente já não tenho mais cabeça para isso. O código da maneira que está agora apresenta basicamente os seguintes erros: ‘getCourseTutor’ was not declared in this scope */ isso para quase class ‘GradeBook’ does not have any field named ‘courseTutor’ todas as ‘std::string GradeBook::courseTutor’ conflicts with a previous declaration funções-membros \* O código estava funcionando apenas com as funções 1. Tentei adicionar as funções 2 seguindo o mesmo padrão e não deu muito certo. E aí está a criança: // Figura 3.16: GradeBook.cpp // Implementações das definições de função-membro de GradeBook. // A função setCourseName realiza a validação. #include <iostream> using std::cout; using std::endl; #include "GradeBook.hpp" // inclui a definição de classe GradeBook // construtor inicializa courseName com String fornecido como argumento GradeBook::GradeBook( string name, string tutor ) : courseName( name ), courseTutor( tutor ) { setCourseName( name ); // valida e armazena courseName setCourseTutor( tutor ); } // fim do construtor GradeBook // função que configura o nome do curso; // assegura que o nome do curso tenha no máximo 25 caracteres void GradeBook::setCourseName( string name ) { if ( name.length() <= 25 ) // se o nome tiver 25 ou menos caracteres courseName = name; // armazena o nome do curso no objeto if ( name.length() > 25 ) // se o nome tiver mais de 25 caracteres { // configura courseName como os primeiros 25 caracteres do parâmetro name courseName = name.substr( 0, 25 ); // inicia em 0, comprimento de 25 cout << "Name \'" << name << "\" exceeds maximum length (25).\n" << "Limiting courseName to first 25 characters.\n" << endl; } // fim do if } // fim da função setCourseName // função para obter o nome do curso string GradeBook::getCourseName() { return courseName; // retorna courseName do objeto } // fim da função getCourseName // função que configura o nome do instrutor; // assegura que o nome do curso tenha no máximo 25 caracteres void GradeBook::setCourseTutor( string tutor ) { if ( tutor.length() <= 25 ) // se o nome tiver 25 ou menos caracteres courseName = name; // armazena o nome do curso no objeto if ( tutor.length() > 25 ) // se o nome tiver mais de 25 caracteres { // configura courseTutor como os primeiros 25 caracteres do parâmetro name courseTutor = tutor.substr( 0, 25 ); // inicia em 0, comprimento de 25 cout << "Name \'" << tutor << "\" exceeds maximum length (25).\n" << "Limiting courseName to first 25 characters.\n" << endl; } // fim do if } // fim da função setCourseTutor // função para obter o nome do instrutor string GradeBook::getCourseTutor() { return courseTutor; // retorna courseTutor do objeto } // fim da função getCourseTutor // exibe uma mensagem de boas-vindas para o usuário GradeBook void GradeBook::displayMessage() { // chama getCourseName para obter o courseName cout << "Welcome to the grade book for\n" << getCourseName() << "!" << endl; // exibe uma mensagem de boas-vindas para o usuário GradeBook // chama getCourseTutor para obter o courseTutor cout << "This course is presented by: "<< getCourseTutor() << "!" << endl; }; // fim da função displayMessage // Figura 3.15: GradeBook.hpp // Definição de classe GradeBook apresenta a interface public da // classe. Definições de função-membro aparecem em GradeBook.cpp. #include <string> // o programa utiliza classe de string padrão do C++ using std::string; // definição da classe GradeBook class GradeBook { public: GradeBook( string name, string tutor ); // construtor que inicializa um objeto GradeBook : courseName( name ), courseTutor( tutor ) void setCourseName( courseName ); // função que configura o nome do curso string getCourseName(); // função que obtém o nome do curso void setCourseTutor ( courseTutor ); string getCouseTutor (); void displayMessage(); // função que exibe uma mensagem de boas-vindas private: string courseName; // nome do curso para esse GradeBook string courseTutor; }; // fim da classe GradeBook // Figura 3.17: main.cpp // Cria e manipula um objeto GradeBook; ilustra a validação. #include <iostream> using std::cout; using std::endl; #include "GradeBook.hpp" // inclui a definição de classe GradeBook // a função main inicia a execução do programa int main() { // cria dois objetos GradeBook; // nome inicial de curso de gradeBook1 é muito longo GradeBook gradeBook1( "CS101 Introduction to Programming in C++" ); GradeBook gradeBook2( "CS102 C++ Data Structures" ); // exibe courseName de cada GradeBook cout << "gradeBook1's initial course name is:" << gradeBook1.getCourseName() << "\ngradeBook2’s initial course name is: " << gradeBook2.getCourseName() << endl; // modifica courseName do myGradeBook (com uma string de comprimento válido) gradeBook1.setCourseName( "CS101 C++ Programming" ); // exibe courseName de cada GradeBook cout << "\ngradeBook1's course name is: " << gradeBook1.getCourseName() << "\ngradeBook2's course name is: " << gradeBook2.getCourseName() << endl; return 0; // indica terminação bem-sucedida } // fim de main
  8. O problema todo era não saber usar o Dev C++, antes eu usava o Gdb online, mas justamente por não saber como implementar arquivos no site (Hoje eu sei) que eu baixei o Dev C++. Segui o seu "tutorial" de como criar projetos no Dev C++ e tudo funcionou nos conformes. No fim o exemplo do livro "C++ Como Programar - 5ª edição -" da Deitel não está incorreto, a estratégia de ensino utilizada é mostrar um código bruto e posteriormente o otimizar.
  9. Se linkar o GradeBook.cpp (em qualquer um dos casos) o arquivo de cabeçalho perde o sentido, isso tudo é justamente para que o cliente possa utilizar das funções-membros de GradeBook sem saber como são implementadas. O Dev está apenas compilando, clico em Executar ou Compilar e Executar, mas nada acontece. Quando tentei compilar incluindo suas modificações o GradeBook.cpp provavelmente não carregou o GradeBook.hpp e tive que adicionar #include <string> using namespace std; a ele. Agora aparece esta mensagem de erro quando tento compilar/executar o arquivo.
  10. Usando o Gbd online, o código inicial (o primeiro lá de cima com #pragma once) roda perfeitamente, no Dev C++ os arquivos não estavam reunidos em um projeto, quando eu os reuni não houve problemas com implementação, a compilação aponta 0 erros. Porém não consigo executar o projeto no Dev C++, vou no arquivo que possui a função main (fig03_17.cpp) clico em executar (F10) e nada acontece. Esse agora é um simples problema de uso da plataforma, pode responder como devo proceder?
  11. O problema realmente está no compilador, eu reexecutei o código inicial e ele funcionou também, porém ao compilar "teclando f9" ele começa a demonstrar os mesmos erros de antes e se recusa a rodar o código novamente. Estou usando o Dev C++, tem alguma maneira de o fazer ignora erros, ou algum outro compilador que ignore?
  12. Funcionou, pode me explicar porque não rodou antes e qual é a função do #pragma once?
  13. Ainda estou na batalha para rodar essa classe. adicionei ao fig03_17 o #include "GradeBook.cpp", creio que resolveu os problemas de implementação de arquivos com o dev c++. Porém a classe continua dando erro [Error: redefition of "class of GradeBook"] Mesmo salvando o Gradebook.h como header file mas continua sem rodar. Percebi que ele estava salvo como arquivo C, então salvei ele com a extensão .hpp Porém o mesmo erro persiste. _________________________________________ // Figura 3.17: fig03_17.cpp // Cria e manipula um objeto GradeBook; ilustra a validação. #include <iostream> using std::cout; using std::endl; #include "GradeBook.cpp" #include "GradeBook.hpp" // inclui a definição de classe GradeBook // a função main inicia a execução do programa int main() { // cria dois objetos GradeBook; // nome inicial de curso de gradeBook1 é muito longo GradeBook gradeBook1( "CS101 Introduction to Programming in C++" ); GradeBook gradeBook2( "CS102 C++ Data Structures" ); // exibe courseName de cada GradeBook cout << "gradeBook1's initial course name is: " << gradeBook1.getCourseName() << "\ngradeBook2's initial course name is: " << gradeBook2.getCourseName() << endl; // modifica courseName do myGradeBook (com uma string de comprimento válido) gradeBook1.setCourseName( "CS101 C++ Programming" ); // exibe courseName de cada GradeBook cout << "\ngradeBook1’s course name is: " << gradeBook1.getCourseName() << "\ngradeBook2's course name is: " << gradeBook2.getCourseName() << endl; return 0; // indica terminação bem-sucedida } // fim de main ___________________________________________________________ // Figura 3.16: GradeBook.cpp // Implementações das definições de função-membro de GradeBook. // A função setCourseName realiza a validação. #include <iostream> using std::cout; using std::endl; #include "GradeBook.hpp" // inclui a definição de classe GradeBook // construtor inicializa courseName com String fornecido como argumento GradeBook::GradeBook( string name ) { setCourseName( name ); // valida e armazena courseName } // fim do construtor GradeBook // função que configura o nome do curso; // assegura que o nome do curso tenha no máximo 25 caracteres void GradeBook::setCourseName( string name ) { if ( name.length() <= 25 ) // se o nome tiver 25 ou menos caracteres courseName = name; // armazena o nome do curso no objeto if ( name.length() > 25 ) // se o nome tiver mais de 25 caracteres { // configura courseName como os primeiros 25 caracteres do parâmetro name courseName = name.substr( 0, 25 ); // inicia em 0, comprimento de 25 cout << "Name \"" << name << "\" exceeds maximum length (25).\n" << "Limiting courseName to first 25 characters.\n" << endl; } // fim do if } // fim da função setCourseName // função para obter o nome do curso string GradeBook::getCourseName() { return courseName; // retorna courseName do objeto } // fim da função getCourseName // exibe uma mensagem de boas-vindas para o usuário GradeBook void GradeBook::displayMessage() { // chama getCourseName para obter o courseName cout << "Welcome to the grade book for\n" << getCourseName() << "!" << endl; } // fim da função displayMessage _________________________________________________ // Figura 3.15: GradeBook.hpp // Definição de classe GradeBook apresenta a interface public da // classe. Definições de função-membro aparecem em GradeBook.cpp. #include <string> // o programa utiliza classe de string padrão do C++ using std::string; // definição da classe GradeBook class GradeBook { public: GradeBook( string ); // construtor que inicializa um objeto GradeBook void setCourseName( string ); // função que configura o nome do curso string getCourseName(); // função que obtém o nome do curso void displayMessage(); // função que exibe uma mensagem de boas-vindas private: string courseName; // nome do curso para esse GradeBook }; // fim da classe GradeBook _____________________________________
  14. Obrigado pela ajuda, eu descobri outro erro que ainda está me impedindo de executar a classe. O arquivo GradeBook.h está salvo como cpp, acredito que isso não esteja permitindo utilizar ele como header. Como posso salvá-lo como header?

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×