Я запускаю следующие коды C++ и получаю предупреждение: control достигает конца функции non-void
#include <iostream> #include <algorithm> #include <vector> #include <cstdlib> #include <ctime> using namespace std; enum suits { diamond, club, heart, spade }; class Card { private: int rank; suits suit; public: Card(); Card(suits, int); int getRank() { return rank; } suits getSuit() { return suit; } void setRank(int rankvalue) { rank = rankvalue; } void setSuit(suits suitvalue) { suit = suitvalue; } }; ostream & operator<<(ostream &, Card); Card::Card() { rank = 1; suit = spade; } Card::Card(suits suitvalue, int rankvalue) { rank = rankvalue; suit = suitvalue; } ostream & operator<<(ostream & out, Card aCard) { switch (int rank = aCard.getRank()) { case 14: out << "Ace"; break; case 11: out << "Jack"; break; case 12: out << "Queen"; break; case 13: out << "King"; break; default: out << rank; } switch (suits suit = aCard.getSuit()) { case diamond: out << " of Diamonds"; break; case spade: out << " of Spades"; break; case heart: out << " of Hearts"; break; case club: out << " of Clubs"; break; } return out; } class RandomInteger { public: RandomInteger(); unsigned int operator() (unsigned int max); }; RandomInteger::RandomInteger() { srand(time(0)); } unsigned int RandomInteger::operator()(unsigned int max) { unsigned int rval = rand(); return rval % max; } RandomInteger randomizer; class Deck { Card cards[52]; int topCard; public: Deck(); void shuffle(); bool isEmpty() { return topCard <= 0; } Card draw(); }; extern RandomInteger randomizer; Deck::Deck() { topCard = 0; for (int i = 1; i <= 13; i++) { Card c1(diamond, i), c2(spade, i), c3(heart, i), c4(club, i); cards[topCard++] = c1; cards[topCard++] = c2; cards[topCard++] = c3; cards[topCard++] = c4; } } Card Deck::draw() { if (!isEmpty()) return cards[--topCard]; else { Card spadeAce(spade, 1); return spadeAce; } } void Deck::shuffle() { random_shuffle(cards, cards+52, randomizer); } class Player { public: Player(); void print(); Card draw(Deck &); typedef vector<card> cards; vector<cards> column; }; //ostream & operator<<(ostream &, Player&); Player::Player() { column.push_back(vector<card>()); column.push_back(vector<card>()); column.push_back(vector<card>()); column.push_back(vector<card>()); } Card Player::draw(Deck & aDeck) { for (int i = 0; i < 4; i++) column[i].push_back(aDeck.draw()); } void Player::print() { cout << "Col 1 \t\t Col 2 \t\t Col 3 \t\t Col 4 \n"; bool more = true; for (int j = 0; more; j++) { more = false; for (int i = 0; i < 4; i++) if (j < column[i].size()) { cout << column[i][j] << "\t"; more = true; } else cout << "\t\t"; cout << endl; } } int main() { Deck deck; deck.shuffle(); Player player; player.draw(deck); //while (!deck.isEmpty()) //{ cout << "Enter a column number (0 to draw four new cards): " << endl; //} player.print(); int input; int i; vector<vector<card> > columns(4); while (cin >> input) if (input == 0 ) { player.draw(deck); player.print(); columns.push_back(vector<card>()); columns.push_back(vector<card>()); columns.push_back(vector<card>()); columns.push_back(vector<card>()); } else while (cin >> input) if (input == 1) { for ( i = 0; i > 4; i++) { columns.push_back(vector<card>()); } for ( i = 0; i > 4; i++) { columns[0].back().getSuit(); columns[1].back().getSuit(); columns[2].back().getSuit(); columns[3].back().getSuit(); } } }
Что я уже пробовал:
я попытался поставить return 0; в конце моего int main (), но я все еще получаю то же самое предупреждение
Rick York
Один комментарий к вашему стилю кодирования: Я думаю, что вы должны поставить скобки вокруг утверждений, которые не обязательно нуждаются в них. Я думал в первую очередь о цикле while в вашей основной функции. Я бы написал это так:
while (cin >> input) { if (input == 0 ) { player.draw(deck); player.print(); columns.push_back(vector<card>()); columns.push_back(vector<card>()); columns.push_back(vector<card>()); columns.push_back(vector<card>()); } else while (cin >> input) { if (input == 1) { for ( i = 0; i > 4; i++) { columns.push_back(vector<card>()); } for ( i = 0; i > 4; i++) { columns[0].back().getSuit(); columns[1].back().getSuit(); columns[2].back().getSuit(); columns[3].back().getSuit(); } } } }
Patrice T
Сообщение компилятора также сообщает вам, где находится проблема.
Ты тоже собираешься нам рассказать ?