【问题标题】:Visual C++ - Call a function from a button click methodVisual C++ - 从按钮单击方法调用函数
【发布时间】:2014-10-29 02:37:32
【问题描述】:

我创建了一个 Visual C++ 项目,并在表单中制作了一个按钮。 Visual Studio 为按钮单击事件生成此方法:

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

此代码在 Form1.h 文件中,暂时没有问题。但是,如果我尝试在事件方法中使用其他类调用函数,例如 std::cout (无论是在 Form1.h 文件中定义它还是从另一个文件中#include 它都无关紧要),编译器给了我一个错误(C2079)。

为什么会这样?请耐心等待,因为我是 Windows GUI 编程的菜鸟,在此先感谢任何可以提供帮助的人。

【问题讨论】:

  • 提供一些失败的源代码会有所帮助。但是,如果您包含 iostream,您可能想用#include 替换它。从上面的代码我猜你正在使用 C++/CLI。
  • 如果您使用提到的 fstream,请确保将其放入源文件 using namespace std
  • @MichaelPetch:不,绝对不。这是一个头文件 (Form1.h)。
  • 您的问题标题是 C++,尽管我认为您必须使用 C++/CLI(这是较新的托管 C++)。如果是这种情况,那么您将遇到完全不同的问题。托管服务已经取代了 cin 和 cout 等等。您可以在这里看到一个很好的描述:vishnunath.com/cli-programming 查找 CLI 输入输出和 Console::Write 等。话虽如此,我想知道您是否想在旧 C++ 中进行编程,其中 iostream 之类的东西可以在常规 c++ 中按预期工作语法。如果是这样,您可能希望生成一个 C++ 项目(不是 C++/CLI 和托管 C++)
  • 我认为您没有使用标准的非托管 C++ 来自代码 sn-p "(System::Object^ sender, System::EventArgs^ e)"

标签: visual-studio visual-c++ c++-cli


【解决方案1】:

嗯,有一个解释是 C2079 的一部分。类似于'identifier' uses undefined class/struct/union 'name'。这与 Windows 或 GUI 编程无关。问题只是你必须定义你正在使用的名称。

例如,std::cout 是在 <iostream> 中定义的,您可能没有包括在内。顺便说一句,您希望std::cout 打印到哪里?普通的 GUI 没有文本控制台。

【讨论】:

  • 我包括了 iostream。我以std::cout 为例,我的项目中不需要它。
  • iostream 已被弃用(是旧的非标准库的一部分),现在需要使用 fstream 标头
  • 所以试试include <fstream>; using namespace std。有关 VC++ 中已弃用的标头和替换的更多信息,请参阅msdn.microsoft.com/en-us/library/aa984818(v=vs.71).aspx
  • @MichaelPetch:???不,<iostream> 根本没有被弃用,它在 C++14 中仍然有效。它也从来不是任何旧图书馆的一部分。而<fstream> 是完全错误的;定义std::fstream 和派生类(FILE 流),而不是std::cout
  • 不,只有 <iostream.h> 已弃用,您的链接甚至指出 <iostream> 是替代品。至于你的新链接,这与你试图声称的完全相反:它表明 std::ifstream (一个 FILE 流)是由(也未弃用的)标题 @987654335 定义的@,而不是 <iostream>(它定义了 std::cout 流。)
猜你喜欢
  • 2020-07-15
  • 2012-05-15
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多