Wywoływanie metody przez vector obiektów
Ostatnio zmodyfikowano 2018-08-26 15:50
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. std::vector < Player > vPlayers; Player player_1( 1 ); 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. vPlayers[ round ].Gain( stats_one ); vPlayers[ round ].Check();
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ę: 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. |
|
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/AYfKEB7aYnQYLX3WCzy na pewno dodane są wszystkie niezbędne pliki nagłówkowe? |
|
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. |
|
« 1 » |