Array C ++问题中的对象

时间:2013-01-18 04:04:20

标签: c++

我正在制作一个涉及Player类的简单游戏,并且已经制作了一个数组来在玩家实例化时保持玩家。问题是,每次运行程序时,我都会收到LNK 2019错误 - “未解析的外部符号”。我不确定为什么会发生这种情况或如何让它正常工作。任何帮助将不胜感激。

Player *player = new Player[9];
for(int i = 0; i< world1.numPlayers;i++) // ADD PLAYERS TO ARRAY
{
    Player tempplayer(3,3,5,1);
    player[i] = tempplayer;

}

这是玩家类定义:

#pragma once
class Player
{
public:
Player(int width, int height, int xPos, int health );
~Player(void);
Player();
int getWidth();
int getHeight();
int getHealth();
int getPos();
void setHealth(int newHealth);
bool isAlive();
int width;
int height;
int health;
int xPos;

    };

这是确切的警告:“错误1错误LNK2019:未解析的外部符号”public:__thiscall Player :: Player(void)“(?? 0Player @@ QAE @ XZ)在函数_main C:\ Users \ Alex中引用\ Documents \ Visual Studio 2012 \ Projects \ ConsoleApplication2 \ ConsoleApplication2 \ World.obj ConsoleApplicati on2“

3 个答案:

答案 0 :(得分:2)

您的数组循环没问题。

问题是你没有在.cpp文件中定义你已经宣布的一个或多个类成员函数您的.hpp文件。

我们无法分辨哪一个,因为您没有显示整个错误,但确保它们都是已定义的,即使只有空定义。

常见的罪魁祸首是析构者;当你不需要它做任何事情时,很容易忘记定义它:

Player::~Player()
{
}

它也可能是您的默认构造函数:

Player::Player()
{
}

全部定义!

答案 1 :(得分:0)

Martin是正确的,您需要为该数组指定指针。我原以为这样的错误会给你编译时警告。

链接器错误 - 链接器警告通常会打印出无法找到的内容。这通常足以确定误差源,或者至少指向正确的方向。你能粘贴完整的警告吗?

通常链接时间错误是未定义的成员函数的结果,如dreamlax的注释中所述,或者未能包含其中一个库。

答案 2 :(得分:-2)

你使用类指针,实例和构造函数似乎有点不对。

这就是你的代码应该是这样的:

Player *player[9];

for(int i = 0; i< world1.numPlayers;i++) // ADD PLAYERS TO ARRAY
{

    player[i] = new Player(3,3,5,1);

}

编辑:请注意,这只会绕过原始链接错误的原因。链接器抱怨无法找到默认构造函数Player::Player(void)。如果我没弄错的话,当你使用new Player[9]创建数组时会调用它。声明它应解决此错误,允许您继续使用原始代码而不是我的版本。