Nested Deck class design and implementation
The way I understand your question, you want Card to be publicly available, yet only Deck should be able to construct a Card. One way to achieve this is to make the Card()  constructor private and a friend of Deck:

class Deck;

class Card {
    Card() {}
    friend class Deck;
public:
    // ...
};

class Deck {
    Card card;                     // ok
public:
    Card createCard() {            // ok
        return Card();
    }
};

int main()
{
    Deck deck;
    Card card = deck.createCard();

    Card doesntWork;               // error! Attempt to access private member
}


A somewhat cleaner solution would be to have only createCard() as friend of Card. In that case, however, you will have to dynamically allocate the Card (and return a pointer to it), because of mutual dependencies.

(The reason for this is that Card needs the definition, and not just declaration, of Deck to declare one of the Deck functions a friend. At the same time, Deck::createCard() needs the definition of Card to be able to return a Card by value. If you return a pointer, however, you only need the declaration.)



Other comments:

1: Consider giving ranks, suits and values distinct and unique types. For example using enum. Make use of the type system to enlist the compiler's aid -- by doing this you will be notified if you accidentally switch types somewhere.

2: I would change

for (unsigned iter = aDeck.size(); iter--&gt; 0;)


to the more traditional

for (int i = aDeck.size() - 1; i &gt; -1; --i)


The latter is more readable and clear about what is going on. The former is vulnerable to be incorrected, i.e. refactored to the (incorrect)

for (unsigned iter = aDeck.size(); iter &gt; 0; --iter)


3: Don't call a variable iter when it's a counter and not an iterator.

4: Initializer list ordering should be the same as the variables are declared in the class. By doing this, you avoid ever risking dependency problems. (Variables are always initialized in the order they are declared in the class, not the order they appear in initializer lists.)

5: Reorder your #includes in the implementation file.

Update

6: Your card generation/constructor is error-prone. Apart from introducing type safety, I would recommend generating value based on rank, for example through a function and an std::map.