问题描述
main()
块中的第二行导致错误。行:
Child_Director* child_director = new Child_Director(child_module);
错误:
对`Child_Director::Child_Director(Child_Module*)'的未定义引用
我已经声明了 Child Director 构造函数:
Child_Director(Child_Module* = nullptr);
并定义它:
Child_Director::Child_Director(Child_Module* child_module) : child_module_(child_module)
{
this->child_module_->SetDirector(this);
}
在 main()
的顶部,我有:
#include "Child_Module.h"
#include "Child_Director.h"
我没有看到任何错别字...我确实遇到过[这篇很棒的帖子][1]。在那里列出的原因中,“已声明和未定义的变量或函数”似乎与错误相同。但是,我已经声明并定义了该函数。我不知道还有什么问题。
我错过了什么?我已经发布了错误以及 .h 文件和 .cpp 文件。如果能提供任何帮助,我将不胜感激。
错误:
||=== Build: Debug in Player_Bug (compiler: msys2-mingw-w64-i686) ===|
C:\jana\projects\Player_Bug\main.cpp||In function 'int main()':|
C:\jana\projects\Player_Bug\main.cpp|10|warning: unused variable 'child_director' [-Wunused-variable]|
C:\jana\projects\Player_Bug\main.cpp|10|undefined reference to `Child_Director::Child_Director(Child_Module*)'|
C:\msys64\mingw32\bin\..\lib\gcc\i686-w64-mingw32\10.2.0\..\..\..\..\i686-w64-mingw32\bin\ld.exe: obj\Debug\main.o||in function `ZN12Child_ModuleC1Ev':|
C:\jana\projects\Player_Bug\Child_Module.h|6|undefined reference to `Base_Module::Base_Module(Base_Director*)'|
||error: ld returned 1 exit status|
||=== Build Failed: 3 error(s),1 warning(s) (0 minute(s),1 second(s)) ===|
main():
#include <iostream>
#include "Child_Module.h"
#include "Child_Director.h"
int main()
{
Child_Module* child_module = new Child_Module;
Child_Director* child_director = new Child_Director(child_module);
return 0;
}
Child_Module.h:
#ifndef CHILD_MODULE_H_INCLUDED
#define CHILD_MODULE_H_INCLUDED
#include "Base_Module.h"
class Child_Module : Base_Module
{
DoSomething();
};
#endif // CHILD_MODULE_H_INCLUDED
Child_Module.cpp:
#include "Child_Module.h"
Child_Module::DoSomething()
{
std::cout << "Doing something ..." << std::endl;
this->base_director_->Notify(this,"finished");
}
Child_Director.h:
#ifndef CHILD_DIRECTOR_H_INCLUDED
#define CHILD_DIRECTOR_H_INCLUDED
class Child_Director : public Base_Director
{
private:
Child_Module* child_module_;
public:
Child_Director(Child_Module* = nullptr);
void Notify(Base_Module*,std::string) const override;
void SetModule(Child_Module*);
};
#endif // CHILD_DIRECTOR_H_INCLUDED
Child_Director.cpp:
#include "Child_Director.h"
void Child_Director::Notify(Base_Module* module,std::string message) const
{
std::cout << "Director is notified." << endl;
}
Child_Director::Child_Director(Child_Module* child_module) : child_module_(child_module)
{
this->child_module_->SetDirector(this);
}
void Child_Director::SetModule(Child_Module* child_module)
{
child_module_ = child_module;
this->child_module_->SetDirector(this);
}
Base_Module.h:
#ifndef BASE_MODULE_H_INCLUDED
#define BASE_MODULE_H_INCLUDED
#include "Base_Director.h"
class Base_Module
{
protected:
Base_Director* base_director_;
public:
Base_Module(Base_Director* = nullptr);
void SetDirector(Base_Director*);
};
#endif // BASE_MODULE_H_INCLUDED
Base_Module.cpp:
#include "Base_Module.h"
Base_Module::Base_Module(Base_Director* base_director) : base_director_(base_director){}
void Base_Module::SetDirector(Base_Director* base_director)
{
this->base_director_ = base_director;
}
Base_Director.h:
#ifndef BASE_DIRECTOR_H_INCLUDED
#define BASE_DIRECTOR_H_INCLUDED
class Base_Module;
class Base_Director
{
public:
virtual void Notify(Base_Module*,std::string) const = 0;
};
#endif // BASE_DIRECTOR_H_INCLUDED
Base_Director.cpp:
#include "Base_Director.h"
void Base_Director::Notify(Base_Module* base_module,std::string message) const {};
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)