0

我正在制作一个涉及 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:未解析的外部符号“公共:__thiscall Player::Player(void)”(??0Player@@QAE@XZ) 在函数 _main C:\Users\Alex\Documents\ 中引用Visual Studio 2012\Projects\ConsoleApplication2\ConsoleApplication2\World.obj ConsoleApplicati‌​on2"

4

3 回答 3

2

你的数组循环很好。

问题是您没有在文件中定义您在文件中声明.cpp的一个或多个类成员函数。.hpp

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

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

Player::~Player()
{
}

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

Player::Player()
{
}

全部定义!

于 2013-01-18T04:15:31.503 回答
0

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

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

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

于 2013-01-18T04:10:54.417 回答
-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]. 声明它应该可以解决这个错误,允许您继续使用原始代码而不是我的版本。

于 2013-01-18T04:09:26.257 回答