我正在制作一个涉及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“
答案 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]
创建数组时会调用它。声明它应解决此错误,允许您继续使用原始代码而不是我的版本。