首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环器依赖项VC++

循环器依赖项VC++
EN

Stack Overflow用户
提问于 2011-02-03 00:46:42
回答 2查看 101关注 0票数 0

我已经创建了一个名为windowstestapp的Windows窗体应用程序。然后,我创建了一个名为EXTENDING.CPP的类,其中添加了一个名为add()的函数,该函数从form1类创建一个对象,并获取用于计算的TextBox值。当我试图在form1类中创建扩展对象的实例时,问题就出现了;这不允许我创建对象。

我认为问题出在双向依赖中。有人能帮我吗?

Form1.h的代码:(我将只使用重要的代码)

代码语言:javascript
复制
namespace windowstestapp {

    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;

#include "Extending.h"
#include "Extending.cpp"

public ref class Form1 : public System::Windows::Forms::Form
    {

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

        Extending ^e1=gcnew Extending();

      }
    };
}

Extending.cpp:

代码语言:javascript
复制
#include "StdAfx.h"
#include "Extending.h"
#include "Form1.h"

Extending::Extending(void)
{
}

double Extending::add()
{

    double value=0;
    windowstestapp::Form1 ^f1=gcnew windowstestapp::Form1();

    value=f1->getDistance();

    return value;
}
EN

回答 2

Stack Overflow用户

发布于 2011-02-03 05:33:13

您似乎混淆了源文件和包含文件的概念。

简单地说,在C++中有两种类型的文件:

  • 源文件包含源代码。这是将在您的应用程序中执行的代码。源文件通常具有扩展名.CPP。
  • Include文件包含声明。它们只描述应用程序中的元素,但不包含源代码。包含文件的扩展名通常为.H。

源文件可以包含包含文件,而包含文件可以包含其他包含文件。源文件从不包含在其他文件中。它们被编译并链接在一起。

在您的例子中,在form1.h中包含"Extending.cpp“显然是不正确的。

试着把你的代码分成清晰的包含文件和源文件。这意味着:

  • FORM1.H,它包含类声明,但没有源代码
  • FORM1.CPP,它包含窗体class
  • EXTENDING.H的代码(它包含类声明),但没有源代码code
  • EXTENDING.CPP,它包含扩展类

的源代码

您将注意到FORM1.H将不需要EXTENDING.H,反之亦然。

另一方面,FORM1.CPP可能需要FORM1.H和EXTENDING.H,EXTENDING.CPP可能需要FORM1.H和EXTENDING.H,但这不是问题。

现在编译这两个CPP文件并将它们链接在一起。

一旦您获得了更多使用C++的经验,您将看到确实可以将源代码放在包含文件中(以使内联成为可能),并具有循环依赖项(使用向前声明),但首先要开始获得更多使用C++的经验。

编辑:

如果Form1中存在需要扩展的内容,则可能是以下情况之一:

  • 你有一个内联方法,它需要扩展类的定义-->将该方法移动到form1.cpp.
  • You,在

中有一个成员,它是指向扩展类的指针-->使用正向声明(编译器实际上不需要知道类的完整定义就能生成存储指针的代码)

  • 你在Form1中有一个成员,它是Extending的一个实例-->那么你真的需要在FORM1.H
  • 你的Form1类继承自Extending-->那么你真的需要在FORM1.H
  • There中包含EXTENDING.H是Form1中的一种数据类型,它需要在扩展中定义一些东西(可以是枚举) -->那么你真的需要在FORM1.H

中包含EXTENDING.H

反之亦然。

如果您仍然具有循环依赖关系,请取出导致该依赖关系的成员,并将它们放入不同的类中,然后EXTENDING.H和FORM1.H都可以使用该类。

票数 1
EN

Stack Overflow用户

发布于 2011-02-10 23:10:39

我已经使用MVC模式做到了这一点。我将模型从视图中分离出来。我使用了一个单独的类来保存我的表单值。使用这个类,我获得了请求的参数。现在可以正常工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4877217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档