2013-04-10 27 views
0

好吧,所以我是新来的C + +试图写我简单的程序,这是一副牌。但是我收到了错误:“未解决的外部问题”。我有一种感觉,它与构造函数中的实例化有关。快速查看将不胜感激。简单的C++卡片程序。未知的错误

#include "Card.h" 
#include "Deck.h" 

Deck:: Deck() 
{ 
    this -> currentCard=0; 

    this -> index = 0; 

    for(int i=0;i<4;i++) 
    { 
     for(int j =0; j < 13;j++) 
     { 
      deck[index].setVal(i); 
     deck[index].setSuit (j); 
      index++; 
     } 
    } 
} 


void Deck::shuffle() 
{ 
    //implementation 
    } 
Card Deck:: dealCard() 
{ 
    //implementation 
    } 


int main(){} 

我的头文件是:

#include "Card.h" 

class Deck 
{ 
public: 
Deck(); 
void shuffle(); 
Card dealCard(); 




private: 
Card deck [52]; 
int currentCard; 
int index; 
}; 
+8

如果您发布确切的错误消息**,这将有所帮助。我非常怀疑它与'构造函数中的实例化'有什么关系。更有可能的是,你没有编译所有的源文件,或者你没有链接到正确的库。猜测,我会说你有一个文件Card.cpp,你没有编译和/或链接。 – john 2013-04-10 06:45:40

+0

你没有在'Deck.h'中显示代码。 'Deck'构造函数中的代码使用'setVal()'和'setSuit()',但是你没有显示任何代码。 – 2013-04-10 06:48:17

+0

这并不重要,但是你为了一个简单的数据模型而自杀。图片*号码* 0..51。现在挑一个(22例作为样本)。采取'n%4'。那就是你的西装(0 =黑桃,1 =棍棒,2 =钻石,3 =心脏)。接下来拿'n%13'。这就是你的等级(0..12,高或低,你的选择)。换句话说,你可以只用一个正数和两个模操作来设计卡片级别和*套装。你的“套牌”然后变成一个“int deck”[52];加载数字“0..51”并洗牌。副手好处:你可以增加52的倍数来增加甲板的大小,以增加更多的甲板 – WhozCraig 2013-04-10 07:01:16

回答

0

这错误意味着你有解析的外部符号

现在符号可以是任何变量,类,成员函数。

为什么它们没有解决是因为可能是您的代码的一部分(或您正在使用的库)依赖于这些符号,并且因为您没有链接正确的库或实现它们而未找到它们。

请尝试编译所有源文件,并确保没有符号(变量,类,成员函数等)丢失。

+0

如果我只是放卡牌[52];它是否会自动创建52个类卡的实例?就像我不需要为每个构造函数调用一个新构造函数? – user2264737 2013-04-10 06:59:04

+0

是的。你(几乎)不会调用构造函数,它们只会自动调用。 – john 2013-04-10 07:02:23

0

Card类似乎未申报。您可能想要在Card.h文件中执行此操作。您可以通过简单地输入class Deck;来转发声明,但请记住它只是一个必须在某处解决的占位符。

0

通常是“无法解析的外部”指向未解决的符号:

错误LNK2001:解析外部符号

这将显示您的连接是什么“这不是解决符号”失踪。

希望这会有所帮助,Yaron