我创建了一个名为windowstestapp的Windows表单应用程序。然后我创建了一个类调用EXTENDING.CPP,其中我添加了一个函数调用add()
,它从form1类创建一个对象并获取计算的文本框值。
当我试图在form1类中创建EXTENDING对象的实例时出现问题;这不允许我创建一个对象。
我认为问题出在双向依赖关系中。任何人都可以帮助我吗?
Form1.h的代码: (我将仅使用重要的代码)
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中:
#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;
}
答案 0 :(得分:1)
您似乎混淆了源文件和包含文件的概念。
简单地说,在C ++中,您有两种类型的文件:
源文件可以包含包含文件,包含文件可以包含其他包含文件。源文件永远不会包含在其他文件中。它们被编译并链接在一起。
在您的情况下,form1.h中包含“Extending.cpp”显然不正确。
尝试将代码拆分为明确的包含文件和源文件。这意味着:
您会注意到FORM1.H不需要EXTENDING.H,反之亦然。
另一方面,FORM1.CPP可能同时需要FORM1.H和EXTENDING.H,可能EXTENDING.CPP可能同时需要FORM1.H和EXTENDING.H,但这不是问题。
现在编译两个CPP文件并将它们链接在一起。
一旦你获得了更多使用C ++的经验,你会发现确实可以将源代码放入包含文件(以使内联成为可能)并具有循环依赖(使用前向声明),但首先开始获得更多使用C ++的经验
修改强>
如果Form1中有某些内容需要EXTENDING.H,则可能是以下情况之一:
相反检查相同的方法。
如果您仍然具有循环依赖关系,请拉出导致依赖关系的成员并将它们放在另一个类中,然后EXTENDING.H和FORM1.H可以使用它们。
答案 1 :(得分:0)
我使用MVC模式完成了这项工作。我将模型与视图分开。我使用了一个单独的类来保存我的表单值。使用该类,我获得了所请求的参数。现在效果很好。