。。。。。.obj...............atal error LNK1120: 2 个无法解析的外部命令
然后,我上网找答案:
得到两个重要信息:
"
first.经过实验, 发现只要有两个cpp同时包含一个定义了变量的.h文件,就会提示错误.
second.有1.cpp和2.cpp, 1.cpp包含1.h, 2.cpp只包含2.h 但是2.h包含了1.h.. 所以1.h中定义的变量编译的时候会在2.pp中有定义. 于是乎2.cpp翻译成的obj里也会有定义, 结果导致提示obj里重定义.
"
于是,我开始修改函数:
现有genealogy.h和genealogyNode.h两个文件:
genealogyNode.h没有出现问题
// genealogyNode.h -- 家谱结点类
#ifndef GENEALOGYNODE_H
#define GENEALOGYNODE_H
class string;
using std::string;
class genealogyNode{};
#endif
当
genealogy.cpp 将基类的头文件包含在派生类的头文件中。
// genealogy.h -- 家谱类
#ifndef GENEALOGY_H
#define GENEALOGY_H
#include "genealogyNode.h";
//class genealogyNode; // <- 注意这里---------------------------------------
using std::string;
class genealogy: public genealogyNode
{
private:
genealogyNode * root; // 树根
genealogyNode * fence; // 定位梢
...}; // 单继承家谱的根结点
#endif
出现这个提示:
1>------ 已启动生成: 项目: Genealogy Management System, 配置: Debug Win32 ------
1>正在链接...
1>genealogy.obj : error LNK2019: 无法解析的外部符号 "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall genealogy::translateDateToDateHelp(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?translateDateToDateHelp@genealogy@@QAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V23@@Z),该符号在函数 "public: void __thiscall genealogy::input(void)" (?input@genealogy@@QAEXXZ) 中被引用
1>genealogy.obj : error LNK2019: 无法解析的外部符号 "public: char __thiscall genealogyNode::translateInBooldType(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?translateInBooldType@genealogyNode@@QAEDV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z),该符号在函数 "public: void __thiscall genealogy::update(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?update@genealogy@@QAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0@Z) 中被引用
1>genealogyNode.obj : error LNK2001: 无法解析的外部符号 "public: char __thiscall genealogyNode::translateInBooldType(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?translateInBooldType@genealogyNode@@QAEDV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
1>G:\Genealogy Management System\Genealogy Management System\Debug\Genealogy Management System.exe : fatal error LNK1120: 2 个无法解析的外部命令
1>生成日志保存在“file://g:\Genealogy Management System\Genealogy Management System\Genealogy Management System\Debug\BuildLog.htm”
1>Genealogy Management System - 4 个错误,0 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========
当
genealogy.cpp 将基类的类直接声明的时候。
// genealogy.h -- 家谱类
#ifndef GENEALOGY_H
#define GENEALOGY_H
// #include "genealogyNode.h"; // <- 注意这里---------------------------------------
class genealogyNode;
using std::string;
class genealogy: public genealogyNode{}; // 单继承家谱的根结点
#endif
1>------ 已启动生成: 项目: Genealogy Management System, 配置: Debug Win32 ------
1>正在编译...
1>mainFunction.cpp
1>g:\genealogy management system\genealogy management system\genealogy management system\genealogy.h(15) : error C2504: 'genealogyNode' : base class undefined
1>Generating Code...
1>Compiling...
1>main.cpp
1>g:\genealogy management system\genealogy management system\genealogy management system\genealogy.h(15) : error C2504: 'genealogyNode' : base class undefined
1>Generating Code...
1>Compiling...
1>genealogy.cpp
1>Generating Code...
1>生成日志保存在“file://g:\Genealogy Management System\Genealogy Management System\Genealogy Management System\Debug\BuildLog.htm”
1>Genealogy Management System - 2 个错误,0 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========
晕啊~这个到底怎么解决好呢?问题根源是出现在哪呢?
6 个解决方案
#1
translateDateToDateHelp函数没有实现
子类需要实现声明的虚函数
子类需要实现声明的虚函数
#2
translateDateToDateHelp()检查了一下,已经正确声明且定义了。
不过为什么,子类为什么要声明虚函数?
#3
你这个情况肯定是有函数没有实现的原因。 你仔细检查一下吧。
子类中不是声明虚函数,而是实现父类中的虚函数。
子类中不是声明虚函数,而是实现父类中的虚函数。
#4
1、class genealogy: public genealogyNode{};
这种代码必须要:#include "genealogyNode.h"
不能使用:class genealogyNode;
2、error LNK2019: 是需要加入string头文件: #include <string>
3、translateInBooldType 方法你没定义吧
这种代码必须要:#include "genealogyNode.h"
不能使用:class genealogyNode;
2、error LNK2019: 是需要加入string头文件: #include <string>
3、translateInBooldType 方法你没定义吧
#5
的确是还有几个函数还没有定义,只是不是它提示的名字罢了,原来原因出现在这里,因为现在还没有将整个程序写完,然后,还打算写一部分,试编译一部分,之前还以为如果不需要用到的那些函数可以只声明不定义呢。。
#6
可以写空函数,return 0;
#1
translateDateToDateHelp函数没有实现
子类需要实现声明的虚函数
子类需要实现声明的虚函数
#2
translateDateToDateHelp()检查了一下,已经正确声明且定义了。
不过为什么,子类为什么要声明虚函数?
#3
你这个情况肯定是有函数没有实现的原因。 你仔细检查一下吧。
子类中不是声明虚函数,而是实现父类中的虚函数。
子类中不是声明虚函数,而是实现父类中的虚函数。
#4
1、class genealogy: public genealogyNode{};
这种代码必须要:#include "genealogyNode.h"
不能使用:class genealogyNode;
2、error LNK2019: 是需要加入string头文件: #include <string>
3、translateInBooldType 方法你没定义吧
这种代码必须要:#include "genealogyNode.h"
不能使用:class genealogyNode;
2、error LNK2019: 是需要加入string头文件: #include <string>
3、translateInBooldType 方法你没定义吧
#5
的确是还有几个函数还没有定义,只是不是它提示的名字罢了,原来原因出现在这里,因为现在还没有将整个程序写完,然后,还打算写一部分,试编译一部分,之前还以为如果不需要用到的那些函数可以只声明不定义呢。。
#6
可以写空函数,return 0;