繁体   English   中英

在C ++中创建对象时出现“未解决的外部符号”错误

[英]“Unresolved External Symbol” errors when creating object in C++

我是一个非常有经验的程序员,但是我现在才开始涉足C ++,这...比PHP和Python困难得多。 尝试从某些类创建对象时,我一直遇到无法解决的外部错误。 它分为多个标头和文件,但这是我的一个班级的基本思想:

die.h:

#ifndef DIE_H
#define DIE_H

using namespace std;

class Die {
 public: 
  int throwDie();
  Die();
};

#endif

管芯

#include <iostream>
#include <cstdlib>
#include "Die.h"

using namespace std;

int Die::throwDie() 
{
 return 0;
}

sixsideie.h

#ifndef SIXSIDEDIE_H
#define SIXSIDEDIE_H

#include "Die.h"

using namespace std;

class SixSideDie : public Die
{
 public:
  SixSideDie();
  int throwDie();

 private: 
         int randNumber;
};

#endif

sixsideie.cpp

#include <iostream>
#include <cstdlib>
#include <time.h>
#include "Die.h"
#include "SixSideDie.h"

using namespace std;

const int SIX_SIDE = 6;

int SixSideDie::throwDie()
{
 srand((unsigned int)time(0));
 SixSideDie::randNumber = rand() % SIX_SIDE + 1;
 return SixSideDie::randNumber;
}

main.cpp

#include <iostream>
#include <cstdlib>
#include "Die.h"
#include "SixSideDie.h"
#include "TenSideDie.h"
#include "TwentySideDie.h"

using namespace std;

int main() 
{
 Die* myDice[3];
 myDice[0] = new SixSideDie();
 myDice[1] = new TenSideDie();
 myDice[2] = new TwentySideDie();

 myDice[0]->throwDie();
 myDice[1]->throwDie();
 myDice[2]->throwDie();

 system("pause");
 return 0;
}

它不断告诉我,我在上方直接创建的每个对象都是无法解析的外部符号,我只是不知道为什么。 有什么想法吗!?

您声明了Die的构造函数,但从未定义过。

另外,如果您打算在派生类中覆盖throwDie的行为,几乎可以肯定要使throwDie为虚拟的,并且永远不要使用using namespace std; 在头文件中(很多人,包括我在内,都认为您根本不应该在文件范围内使用它)。

您没有在cpp文件中定义构造函数。

定义类的构造函数是一种好的做法。 看一下这个:

#ifndef DIE_H
#define DIE_H

using namespace std;

class Die {
 public: 
  int throwDie();
  Die() { };  // can you spot the difference here?
};

#endif

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM