namespace嵌套产生的问题,求解决

时间:2022-08-18 20:17:48
我在vc中使用了两个namespace ,想要各自namespace中的对象互相调用对方的方法,结果报错,这种情况如何解决呢 原型如下:
#include "wert.h"
namespace uuid {
   using namespace uuid2;
   public ref class Form1 : public System::Windows::Forms::Form
   {  
     uuid2::wert^ a;
    ...}
}


#include "Form1.h"
namespace uuid2 {
   using namespace uuid;
   public ref class wert : public System::Windows::Forms::Form
   {
     uuid::Form1^ b;
    }
}

结果报错信息如下:
错误 2 error C2871: 'uuid' : a namespace with this name does not exist e:

我设想控件和主程序之间进行Message传递,控间可以使用主程序实例,主程序也可以使用控间实例,似乎在VC.net中是不能互相引用的,有其它解决方法吗

9 个解决方案

#1


你是两个项目??

#2


做第三个项目
输出个两个接口 IA, IB
FORM 实现ia
control 实现ib
通过接口调用

#3


是一个项目里的,其中一个是控件,另一个是调用方,这两个部分之间需要大量的数据通信,所以曾经设想母体作Observe,控间作subject,但是观察者模式还是需要互相知道对方类型,现在只能一方包含一方头文件,如果互相包含头文件的化就出现了两个命名空间找不到的情况

#4


控件也需要调用方的一些数据,比如绘图环境和数据的提取在调用方,而绘图功能在控间上,因此我想控间能识别调用方并且从调用方得到Graphics之类的数据

#5


你都是使用内联方式操作类的所以出现这个问题
把你的类方法后置
写在cpp中类似
form1.h
....
namesapce form
{
   ref class form1{
   ....
   public:
     void test();
  };
 
}
form1.cpp
#include "control.h"
using namespace form;
void test()
{
   control::control1^ c1 = gcnew control::control1();
}

control.h
......
namespace control
{
  ref class control1
  {
  ...
   public: 
    void ctest();

 ...
  }
}
control1.cpp
...
#include "form1.h"
using namespace control;
void control1::ctest()
{
  form::form1^ f1 = gcnew form::form1();
}

#6


有点错误
using namespace form;
void test()
=====〉
void form1::test()
...

#7


关注..

#8


hdt(倦怠) 
你好,我按照你的方法将控件的实现放在cpp中,如下:我在控件类中设了一个System::Windows::Forms::Form^ parent;成员

在实现中有如下两个函数
ctlTestControl::ctlTestControl(System::Windows::Forms::Form^ parentForm)
{
     parent =parentForm;
}
System::Void ctlTestControl::button1_Click(System::Object^  sender,                 System::EventArgs^  e)
{
    ParentForm1::Form1^ nowParent =safe_cast<ParentForm1::Form1^>(parent);
    nowParent->m_iMember =10;
    MessageBox::Show("已经更改父窗体成员");
}

但是只要将控件从工具箱上脱出来首先会出现com错误,并且在编译时出现
错误 2 error C2011: 'ParentForm1::Form1' : 'class' type redefinition

我估计还是命名控件using 时出的错,怎么解决呢?

#9


up

#1


你是两个项目??

#2


做第三个项目
输出个两个接口 IA, IB
FORM 实现ia
control 实现ib
通过接口调用

#3


是一个项目里的,其中一个是控件,另一个是调用方,这两个部分之间需要大量的数据通信,所以曾经设想母体作Observe,控间作subject,但是观察者模式还是需要互相知道对方类型,现在只能一方包含一方头文件,如果互相包含头文件的化就出现了两个命名空间找不到的情况

#4


控件也需要调用方的一些数据,比如绘图环境和数据的提取在调用方,而绘图功能在控间上,因此我想控间能识别调用方并且从调用方得到Graphics之类的数据

#5


你都是使用内联方式操作类的所以出现这个问题
把你的类方法后置
写在cpp中类似
form1.h
....
namesapce form
{
   ref class form1{
   ....
   public:
     void test();
  };
 
}
form1.cpp
#include "control.h"
using namespace form;
void test()
{
   control::control1^ c1 = gcnew control::control1();
}

control.h
......
namespace control
{
  ref class control1
  {
  ...
   public: 
    void ctest();

 ...
  }
}
control1.cpp
...
#include "form1.h"
using namespace control;
void control1::ctest()
{
  form::form1^ f1 = gcnew form::form1();
}

#6


有点错误
using namespace form;
void test()
=====〉
void form1::test()
...

#7


关注..

#8


hdt(倦怠) 
你好,我按照你的方法将控件的实现放在cpp中,如下:我在控件类中设了一个System::Windows::Forms::Form^ parent;成员

在实现中有如下两个函数
ctlTestControl::ctlTestControl(System::Windows::Forms::Form^ parentForm)
{
     parent =parentForm;
}
System::Void ctlTestControl::button1_Click(System::Object^  sender,                 System::EventArgs^  e)
{
    ParentForm1::Form1^ nowParent =safe_cast<ParentForm1::Form1^>(parent);
    nowParent->m_iMember =10;
    MessageBox::Show("已经更改父窗体成员");
}

但是只要将控件从工具箱上脱出来首先会出现com错误,并且在编译时出现
错误 2 error C2011: 'ParentForm1::Form1' : 'class' type redefinition

我估计还是命名控件using 时出的错,怎么解决呢?

#9


up