未看到构造函数定义

问题描述

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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...