Bonjour.

Je cherche à faire un jeu de carte et j'en suis à la définition des classes de base.

J'ai un problème lorsque le jeu cherche à créer une Main en piochant dans le deck :

Voici une version simplifiée de mon problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <deque>
#include <iostream>
 
class Card {
    enum Rank {/*As à Roi*/} m_rank;
    enum Suit {/*Couleurs*/} m_suit;
 
    Card(Rank rank, Suit suit) :
	m_rank(rank), m_suit(suit) {}
 
    Card(Card &&other) :
        m_rank(std::move(other.m_rank)), suit(std::move(other.m_suit)) {}
 
    Card& operator= (Card &&other) {
        m_rank = std::move(other.m_rank);
        m_suit = std::move(other.m_suit);
        return *this;
    }
 
    Card(const Card&) = delete;
    Card& operator= (const Card&) = delete;
};
 
class Deck {
    /**
     * Creates 52 cards.
     */
    Deck();
    /**
     * @brief draw
     * Extract the front card.
     * After this function, the deck won't be full anymore.
     * @return the front card of the deck
     */
    Card &&draw() {
        auto card(std::move(m_cards.front()));
        m_cards.pop_front();
        return std::move(card);
    };
 
    std::deque< Card > m_cards;
};
 
int main(int, char**) {
    Deck d;
    auto c = d.draw();
    std::cout << c.m_rank << '\n';
    return 0;
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
g++ main.cpp -Wall -Wextra -std=c++11 && ./a.out 
-110905296
Le code compile mais le problème vient de la fonction Deck::draw() qui renvoie une carte avec des valeurs aléatoires.
Je pense que le problème vient de la sémantique de mouvement que je ne maîtrise pas encore assez.

D'après vous d'où vient le problème ?