-3

我正在使用 Visual C++ 2010 进行编程。我有一个 example.h example.cpp 和 Form1.h。基本上,我已经粘贴了一些代码。我无法在 example.h 文件中包含 Form1.h,不知道为什么。但主要问题是如何从 example.cpp 调用 Test(在 form1.h 中)?语法是什么?是否有可能做到这一点?

我的 Form1.h

#include "example.h" 
public ref class Form1 : public System::Windows::Forms::Form
{
    public: void Test(void)
    {
              // Does something
    }
}

我的例子.cpp

#include "example.h"
#include "Form1.h"

Test();    // would like to call Test from here. 
4

1 回答 1

1

你在这里有两个问题:

  1. 必须从另一个函数内部调用函数。您当前在example.cpp文件中的代码无效,因为您试图Test()在全局范围内调用该函数。

    让它看起来像这样:

    int main()
    {
        Test();
    
        return 0;
    }
    

    这也解决了你没有main函数的问题,函数是任何 C++ 应用程序的入口点。

    更一般地说,我强烈建议使用 Visual Studio 附带的项目模板之一来开始(而不是像你说的那样复制和粘贴随机的代码)。这可确保您拥有入门所需的所有东西,例如入口点。一旦你有了坚实的基础,你就可以从那里开始建设。

    您可能还会发现获取有关 C++/CLI 的书籍或在线教程(例如:Hello C++/CLI, Part 1Hello C++/CLI, Part 2)很有用。

  2. 您的Test函数是该类的成员函数Form1,这意味着您需要该类的对象才能调用它。因此,代码实际上应该如下所示:

    int main()
    {
        Form1^ frm = gcnew Form1();
        frm.Test();
    
        return 0;
    }
    

    Test()或者,您可以通过将函数设为函数来解决此问题static。这将允许您在没有类实例的情况下调用它:

    public ref class Form1 : public System::Windows::Forms::Form
    {
        public: static void Test(void)
        {
            // Does something
        }
    }
    
    // ...
    
    int main()
    {
        Form1::Test();
    
        return 0;
    }
    

    但是,请注意,这意味着您无法访问函数内部的任何其他类成员因为没有指针)。Form1Test()this

    这一切都应该在您决定用来学习 C++/CLI 的任何书籍/教程中进行解释——搜索关于“类”或“面向对象设计”的章节。

于 2013-08-02T07:30:29.327 回答