c ++

时间:2015-08-22 23:41:25

标签: c++ linkage

我正在制作一个处理扑克牌和概率的简单程序。我正在各种各样的手上运行测试用例,在我的程序中,我需要一个可以从中抽出持久且全局的手牌。我的程序有三个主要对象:Card,Hand和Deck。我正在尝试创建一个全局套牌,但似乎无论我做什么我得到一个错误说globalDeck在hand.cpp中是未定义的。以下是相关代码:

hand.cpp:

Hand::Hand(int &one, int &two, int &three, int &four, int &five)
{
    cardsinHand.push_back(globalDeck.copy(one));
    cardsinHand.push_back(globalDeck.copy(two));
    cardsinHand.push_back(globalDeck.copy(three));
    cardsinHand.push_back(globalDeck.copy(four));
    cardsinHand.push_back(globalDeck.copy(five));
}

和我的cardgames.cpp文件:

#include "stdafx.h"
#include<iostream>
#include "hand.h"
using namespace std;

Deck globalDeck;

void printresults(long successes, long trials)
......

注意:我已经尝试用exck deck globalDeck,extern const globalDeck等替换Deck globalDeck等。似乎没有什么能让globalDeck在hand.cpp中定义。此外,甲板将在整个程序中保持不变,因此可以将其声明为全局常量或全局变量,以较容易的方式。我的错误输出是:

1>c:\users\\desktop\semesters past\winter 2013\computer programming\projects\cardgames\cardgames\hand.cpp(31): error C2065: 'globalDeck' : undeclared identifier
1>c:\users\\desktop\semesters past\winter 2013\computer programming\projects\cardgames\cardgames\hand.cpp(31): error C2228: left of '.copy' must have class/struct/union
1>          type is 'unknown-type'

2 个答案:

答案 0 :(得分:3)

在一个头文件中声明您的全局变量

extern Deck globalDeck;

在cardgames.cpp

中定义它
Deck globalDeck;

说明:编译器必须先查看globalDeck之前的内容才能使用它。编译器主要处理每个* .cpp,而不是查看其他的.cpp。在头文件中,您可以在不提供完整且唯一的定义的情况下说明程序中的内容。

答案 1 :(得分:0)

{p> class Deck尚未在hand.cpp中定义,因为缺少标头。您需要添加#include "hand.h"#include "deck.h"等内容。