我正在尝试用Visual C ++编写一个简单的Windows窗体应用程序
我的问题是我在.cpp上构建了一个函数
bool function()
{
//code
}
问题是我试图从.h文件中调用此函数做到单击按钮
private:
System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
bool result = function();
}
我正在编译错误。
我在上一个帖子中读到“尝试在.cpp文件中声明onClick
的正文”。
问题是......我不确定我究竟应该在.cpp文件中添加什么内容?
感谢您的时间;非常感谢任何帮助。
答案 0 :(得分:2)
您可以在使用之前简单地放置该函数的原型。
bool function();
void whatever::button_click()
{
bool result = function();
}
如果您不希望它在外面可见,您甚至可以将原型放入函数中:
void whatever::button_click()
{
bool function();
bool result = function();
}
当然,如果.cpp文件中的函数与原型不匹配,则会出现链接器错误。
答案 1 :(得分:0)
我认为这里的问题是你不明白为什么一切都和c ++世界一样。 假设您想制作一个具有功能栏的Foo类,您可以轻松实现
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;
};
但是由于多种原因,这是非常低效的,首先如果我们保留这样的一切,编译器每次在其他地方#included文件时都必须编译相同的东西,所以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();
}