从Visual C ++ 2010中的标头调用函数

时间:2013-08-02 04:05:24

标签: c++-cli

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

My Form1.h

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

我的example.cpp

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

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

1 个答案:

答案 0 :(得分: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;
    }
    

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

    这应该在你决定用来学习C ++ / CLI的任何书籍/教程中解释所有关于" Classes"或者"面向对象的设计"。