1

这似乎是一个非常容易解决的问题,但我无法理解它的来源。

任何帮助都非常感谢!

以下 2 行代码分别产生以下错误。

vector <spades::player> players(4, player());
vector <spades::card> deck(52,card());

error: 'player' was not declared in this scope
error: 'card' was not declared in this scope

下面是我的card.cpp

#include <iostream>
#include <sys/ioctl.h>
#include <cstdio>
#include <unistd.h>
#include <locale.h>
#include <ncursesw/ncurses.h>

#include "card.h"
namespace spades {
card::card()
{
    cardSuit = 0;
    cardNum = 0;
}

card::card(int suit, int number)
{
    cardSuit = suit;
    cardNum = number;
}
}

下面是我的 player.cpp

#include <iostream> // Stream declarations
#include <vector> //Vectors used to store deck and players hands
#include <string> //String declarations
#include <algorithm> //Shuffle Method
#include <sys/ioctl.h>
#include <cstdio>
#include <unistd.h>
#include <locale.h>
#include <ncursesw/ncurses.h>
#include "player.h"
namespace spades {
using namespace std;


player::player() {
    score =0; //total score
    bid = NULL; //bid for that round
    tricksTaken = 0; //score for thast round
    sandBag = 0; //the number of points you win, more than what you bid, every 10th bag = -100
    doubleNil = false;
    for(int i=0; i<13; i++)
        hand.push_back(card());
}

void player::addCard(spades::card b){
    for (int i=0; i<hand.size(); i++){
        //compare card being played to the ones in your hand to search and determine which one to erase
        if((hand.at(i).getCardNum() == 0) &&
            (hand.at(i).getSuit() == 0))
        {
            hand.at(i).setCardNum(b.getCardNum());
            hand.at(i).setSuit(b.getSuit());
            return;
        }
    }
}

void player::removeCard(spades::card a) {
    for (int i=0; i<hand.size(); i++){
        //compare card being played to the ones in your hand to search and determine which one to erase
        if((hand.at(i).getCardNum() == a.getCardNum()) &&
            (hand.at(i).getSuit() == a.getSuit()))
        {
            hand.at(i).setCardNum(0);
            hand.at(i).setSuit(0);
            return;
        }
    }
}
}
4

2 回答 2

3

编译器实际上是在抱怨您传递给向量构造函数的参数。您在构造函数参数中指定了player()and card(),而很明显您的类型实际上被命名为spades::playerand spades::cardspades::您在模板参数中正确指定了该部分。为什么你省略spades::了构造函数参数中的部分?

它应该是

vector <spades::player> players(4, spades::player());
vector <spades::card> deck(52, spades::card());

应该注意的是,显式参数是不必要的,所以你可以这样做

vector <spades::player> players(4);
vector <spades::card> deck(52);

并得到相同的结果。

于 2012-11-28T19:05:56.537 回答
0

你也不需要

    namespace spades {

    }

块在 player.cpp 中,仅围绕头文件中的类定义。也许你会

    using namespace spades;
于 2012-11-28T19:16:25.317 回答