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

Wywoływanie metody przez vector obiektów

Ostatnio zmodyfikowano 2018-08-26 15:50
Autor Wiadomość
Wolfff
Temat założony przez niniejszego użytkownika
Wywoływanie metody przez vector obiektów
» 2018-08-26 11:19:42
Szukałem i szukałem w googlach 3 godziny ale nie mogę znaleźć wyjaśnienia które rozumiem do tego problemu.
Może warto wspomieć że klasa Player znajduje się w innym pliku, kod poniżej jest realizowany w main.

C/C++
std::vector < Player > vPlayers;
Player player_1( 1 ); // konstruktor obiektu Player pobiera jedną zmienną
Player player_2( 2 );
Player player_3( 3 );
Player player_4( 4 );

vPlayers.push_back( player_1 );
vPlayers.push_back( player_2 );
vPlayers.push_back( player_3 );
vPlayers.push_back( player_4 );

Dalej w programie jest zmienna int round, i zależnie od tej zmiennej chcę wykonywać działania na jednym z 4 obiektów Player.

C/C++
vPlayers[ round ].Gain( stats_one ); // metoda klasy Player
vPlayers[ round ].Check(); // metoda klasy Player
I w tym momencie dostaję error: 
error C2228: left of '.Check' must have class/struct/union
error C2228: left of '.Gain' must have class/struct/union

A wcześniej jeszcze trochę:
C/C++
error C2065: 'Player': undeclared identifier
error C2923: 'std::vector': 'Player' is not a valid template type argument for parameter '_Ty'
error C2903: 'allocator': symbol is neither a class template nor a function template
error C3203
    : 'allocator'
    : unspecialized class template can 't be used as a template argument for template parameter ' _Alloc ', expected a real type error C2133
    : 'vPlayers'
    : unknown size error C2512
    : 'std::vector'
    : no appropriate default constructor available error C2065
    : 'Player'
    : undeclared identifier error C2146
    : syntax error
    : missing ';' before identifier 'player_1' error C3861
    : 'player_1'
    : identifier not found error C2065
    : 'Player'
    : undeclared identifier error C2146
    : syntax error
    : missing ';' before identifier 'player_2' error C3861
    : 'player_2'
    : identifier not found error C2065
    : 'Player'
    : undeclared identifier error C2146
    : syntax error
    : missing ';' before identifier 'player_3' error C3861
    : 'player_3'
    : identifier not found error C2065
    : 'Player'
    : undeclared identifier error C2146
    : syntax error
    : missing ';' before identifier 'player_4' error C3861
    : 'player_4'
    : identifier not found error C2065
    : 'player_1'
    : undeclared identifier error C2065
    : 'player_2'
    : undeclared identifier error C2065
    : 'player_3'
    : undeclared identifier error C2065
    : 'player_4'
    : undeclared identifier error C2678
    : binary '['
        : no operator found which takes a left - hand operand of type 'std::vector'( or there is no acceptable conversion )

Oczywiście jest tak dużo błędów, co świetnie ilustruje jak długo pisze w c++, że moją prośbą nie jest "jak to naprawić" tylko raczej - "jak w ogóle można zrealizować ten pomysł". Dzięki wielkie za pomoc.
P-172213
YooSy
» 2018-08-26 11:34:20
To co przedstawiłeś powinno działać:
class Player {
public:
   Player(int id):
      id{ id }
   { }

   void Check() { std::cout << "Player: " << id << std::endl; }

private:
   int id;
};

int main() {
   Player player_1(1); // konstruktor obiektu Player pobiera jedną zmienną
   Player player_2(2);
   Player player_3(3);
   Player player_4(4);


   std::vector<Player> vPlayers;
   vPlayers.push_back(player_1);
   vPlayers.push_back(player_2);
   vPlayers.push_back(player_3);
   vPlayers.push_back(player_4);


   for (std::size_t i = 0; i < vPlayers.size(); ++i) {
      vPlayers[i].Check();
   }
}
https://wandbox.org/permlink​/AYfKEB7aYnQYLX3W

Czy na pewno dodane są wszystkie niezbędne pliki nagłówkowe?
P-172214
Wolfff
Temat założony przez niniejszego użytkownika
» 2018-08-26 15:50:59
Dodałem plik nagłówkowy w którym są wszystkie pliki nagłówkowe, ale jak przerzuciłem go prosto do main to zaczęło działać! Dzięki, głupia pomyłka.
Nie sądziłem że to może być problemem kiedy VisualStudio pokazywało wszystkie własności przy najechaniu na kod, spodziewałem się że podkreśliło by od razu jako błąd kiedy nie zna nazwy. Jeszcze raz dzięki.
P-172218
« 1 »
  Strona 1 z 1