在.h中调用.cpp方法

Invoque .cpp method inside .h

本文关键字:cpp 方法 调用      更新时间:2023-10-16

我正在尝试用Visual c++编程一个简单的Windows窗体应用程序

我的问题是,我已经建立了一个函数。cpp

Form1.cpp

bool function()
{
    //code
}

问题是,我试图调用这个函数从。h文件做点击按钮

Form1.h

private: 
System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    bool result = function();
}

我有编译错误。

我在之前的帖子中读到"尝试在.cpp文件中声明onClick的体"。问题是……我不确定我到底应该把什么放在。cpp文件?

感谢您的宝贵时间;

您可以在使用该函数之前简单地放置一个原型。

bool function();
void whatever::button_click()
{
    bool result = function();
}

如果你不想让原型在函数外可见,你甚至可以把它放入函数中:

void whatever::button_click()
{
    bool function();
    bool result = function();
}

当然,如果.cpp文件中的函数与原型不匹配,您将得到链接器错误。

我认为这里的问题是你不明白为什么在c++世界中一切都是这样的。假设你想创建一个类Foo它有一个函数Bar,很简单只要输入

class Foo
{
    void Bar(){/*code*/}
};

现在你在一个文件中有Foo类,但你还需要一个必须在另一个文件中的Baz类。你不能移动Foo,所以c++有#include系统。这样,您可以将Foo放在一个文件中,Baz放在另一个文件中,并且仍然可以同时使用它们。一个理论上的例子可以是:

#include "Foo.h"
class Baz
{
     Foo* foo;
};

对编译器的翻译是这样的(现在考虑Foo.h包含我之前写的内容):

class Foo
{
    void Bar(){/*code*/}
}; 
class Baz
{
     Foo* foo;
};

但这是非常低效的,原因有很多,首先,如果我们保持这样的一切,编译器将不得不编译相同的东西,每次你#包含一个文件在其他地方,所以c++有另一种机制,允许你告诉编译器,类Foo存在于其他地方,它将在未来可用,它看起来像这样,因此,当你在c++中创建一个类时,你使用。h文件来描述它应该是什么样子,并将实现保存在cpp文件中。在本例中,它看起来像这样:

//Foo.h
class Foo
{
    void Bar();
}; 
//Foo.cpp
#include "Foo.h"
void Foo::Bar(){/*code*/}
//Baz
#include "Foo.h"
class Foo
{
    void Bar(){/*code*/}
};

那么TLDR,你需要做的就是删除函数定义将其保留为

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e);

在cpp文件中有

System::Void Form1::button1_Click(System::Object^  sender, System::EventArgs^  e) 
{
    bool result = function();
}