Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem: klasy

Ostatnio zmodyfikowano 2012-10-11 18:57
Autor Wiadomość
emaster
Temat założony przez niniejszego użytkownika
Problem: klasy
» 2012-10-11 00:09:47
Witam
mam taki problem:
mam pliki: main1.cpp main2.cpp  klasa.h klasa.cpp
w pliku klasa.h jest definicja klasy
w pliku klasa.cpp są opisane funkcje klasy
załóżmy, że w pliku main1.cpp definiujemy klasę (np. mamy klasę "osoba", definiujemy osoba informatyk;) następnie nadajemy wartość jednemu z elementów obiektu informatyk (np. informatyk.wartosc = 7;).
I teraz jak mogę przesłać obiekt informatyk do jakiejś funkcji w pliku main2.cpp ?
Kombinowałem tak:
w pliku main2 mam funkcję: void a(*informatyk){...}
i przesyłam z pliku main1 obiekt informatyk:
a(& informatyk);
Kompilator sygnalizuje błąd. Co robię źle?
P-66605
crash
» 2012-10-11 00:13:21
Co to za błąd? Na pewno dobrze masz dołączane pliki w #include?
P-66606
emaster
Temat założony przez niniejszego użytkownika
» 2012-10-11 00:15:46
a czy samo przesyłanie klasy jest dobrze wykonane?
P-66608
crash
» 2012-10-11 00:16:34
Nie widzę ani błędu wyrzuconego przez kompilator, ani kodu. Skąd mam wiedzieć ;) ?
P-66609
cyklopek11
» 2012-10-11 00:19:02
emaster nie przesyła się klasy, tylko obiekt klasy (instancję), referencję obiektu lub wskaźnik do obiektu klasy (tyle jeśli chodzi o terminologię). Wklej kod bo z opisu nie dojdziemy co jest.
P-66610
DejaVu
» 2012-10-11 01:07:10
1. Log kompilacji to podstawa.
2. Dzielenie kodu źródłowego na kilka plików - co najmniej 4 tematy były temu poświęcone w ciągu ostatnich 2 tygodni.
3. Słowo "problem" NIC kompletnie nie mówi, więc postaraj się nazwać temat tak, aby OPISYWAŁ problem, a nie INFORMOWAŁ o tym, że się w ogóle pojawił.

http://cpp0x.pl/forum/temat/?id=8371
P-66615
emaster
Temat założony przez niniejszego użytkownika
» 2012-10-11 18:14:48
Przepraszam za temat:

Pliki:
main.cpp:

#include <iostream>
#include <cstring>
#include "character.hpp"
#include "charactercreate.hpp"

using namespace std;
hero player;
int main()
{
    player.money = 100;
    player.live = 100;

    cout << "Give name of your hero:\n";
    cin >> player.name;//give name
    cout << "First you must create your character.\n\n";
    create(& player);

    return 0;
}
klasa character.hpp:

#ifndef CHARACTER_HPP_INCLUDED
#define CHARACTER_HPP_INCLUDED
#include <iostream>
using namespace std;
class hero
{
   //private
   public:
    string name, whoiam;
   int live,
     damage,
      armor,
      money,
      who; //wizard,warrior...
};
#endif // CHARACTER_HPP_INCLUDED
plik charactercreate.hpp:

#ifndef CHARACTERCREATE_HPP_INCLUDED
#define CHARACTERCREATE_HPP_INCLUDED
#include <iostream>
#include "character.hpp"
#include "charactercreate.cpp"
extern hero player;
void create(hero * player);

#endif // CHARACTERCREATE_HPP_INCLUDED
plik createcharacter.cpp:

#include <iostream>
#include "character.hpp"
#include "charactercreate.hpp"
extern hero player;
using namespace std;
void create(hero * player)
{
    int whoIsPlayer;
    cout << "Who do you want to be?\n1.Warrior\n2.Wizard\n3.Archer";
    cin >> whoIsPlayer;
    player.who=whoIsPlayer;
    {//local->define player.damage and player.armor
    if(whoIsPlayer=1)
    {
        player.damage=11;
        player.armor=10;
        player.whoiam="Warrior";
    }
    else if(whoIsPlayer=2)
    {
        player.damage=15;
        player.armor=6;
        player.whoiam="Wizard";
    }
    else if(whoIsPlayer=3)
    {
        player.damage=14;
        player.armor=7;
        player.whoiam="Archer";
    }
    }//end of create definitions

    cout << "#########CREATE#########\n";
    cout << "#                      #\r#Your name: " << player.name << endl;
    cout << "#                      #\r#You are " << player.whoiam << endl;
    cout << "#                      #\r#Your attack = " << player.damage << endl;
    cout << "#                      #\r#Your armor = " << player.armor <<endl;
    cout << "########################\n";
}

A oto moja lista błędów:

||=== RPG1, Debug ===|
C:\Cpp\RPG1\RPG1\charactercreate.cpp||In function 'void create(hero*)':|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|11|error: request for member 'who' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|13|warning: suggest parentheses around assignment used as truth value|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|15|error: request for member 'damage' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|16|error: request for member 'armor' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|17|error: request for member 'whoiam' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|19|warning: suggest parentheses around assignment used as truth value|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|21|error: request for member 'damage' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|22|error: request for member 'armor' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|23|error: request for member 'whoiam' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|25|warning: suggest parentheses around assignment used as truth value|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|27|error: request for member 'damage' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|28|error: request for member 'armor' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|29|error: request for member 'whoiam' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|34|error: request for member 'name' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|35|error: request for member 'whoiam' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|36|error: request for member 'damage' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|37|error: request for member 'armor' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp||In function 'void create(hero*)':|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|6|error: redefinition of 'void create(hero*)'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|6|error: 'void create(hero*)' previously defined here|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|11|error: request for member 'who' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|13|warning: suggest parentheses around assignment used as truth value|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|15|error: request for member 'damage' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|16|error: request for member 'armor' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|17|error: request for member 'whoiam' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|19|warning: suggest parentheses around assignment used as truth value|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|21|error: request for member 'damage' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|22|error: request for member 'armor' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|23|error: request for member 'whoiam' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|25|warning: suggest parentheses around assignment used as truth value|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|27|error: request for member 'damage' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|28|error: request for member 'armor' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|29|error: request for member 'whoiam' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|34|error: request for member 'name' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|35|error: request for member 'whoiam' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|36|error: request for member 'damage' in 'player', which is of non-class type 'hero*'|
C:\Cpp\RPG1\RPG1\charactercreate.cpp|37|error: request for member 'armor' in 'player', which is of non-class type 'hero*'|
||=== Build finished: 30 errors, 6 warnings ===|

**Jestem początkujący, proszę o wyrozumiałość :)
P-66639
crash
» 2012-10-11 18:50:20
Skoro w funkcji create jako parametr przyjmujesz wskaźnik na hero:


void create(hero * player)
{

to używając player należy albo pisać:


    player -> pole = wartość;

    player -> metoda();

albo:


    (*player).pole = wartość;

    (*player).metoda();

player jest wskaźnikiem, nie zwykłą zmienną klasy/struktury

----

Druga sprawa. Staraj się nie używać zmiennych globalnych, tak jak to robisz w pliku main.c. Utwóz instancję struktury wewnątrz main.

Koniecznie zapoznaj się z programowaniem obiektowym, nie gryzie ;)
P-66643
« 1 » 2
  Strona 1 z 2 Następna strona