C++ 将类类型传递给Windows窗体构造函数并必须将其强制转换为类指针才能使用它

C++ 将类类型传递给Windows窗体构造函数并必须将其强制转换为类指针才能使用它,c++,visual-c++,pointers,c++-cli,C++,Visual C++,Pointers,C++ Cli,我使用Visual Studio C++ 2008专业的Windows窗体,我有一个类,我必须传递给另一个窗体,所以这里是我正在做的 //FirstFile.cpp //SecondFile.cpp 正如我在评论中所说的,我需要将“Usuario”转换为“Usuario*”,这样我就可以使用“this”在类中访问,顺便说一下,我不能这样做 乌萨里奥·乌萨里奥 不要使用指针,因为windows窗体不允许使用指针。那我该怎么做呢?有什么把戏吗? 我希望我说得够清楚,谢谢 您不需要强制转换,只需获取地

我使用Visual Studio C++ 2008专业的Windows窗体,我有一个类,我必须传递给另一个窗体,所以这里是我正在做的

//FirstFile.cpp

//SecondFile.cpp

正如我在评论中所说的,我需要将“Usuario”转换为“Usuario*”,这样我就可以使用“this”在类中访问,顺便说一下,我不能这样做

乌萨里奥·乌萨里奥

不要使用指针,因为windows窗体不允许使用指针。那我该怎么做呢?有什么把戏吗?
我希望我说得够清楚,谢谢

您不需要强制转换,只需获取地址

您不需要强制转换,只需获取地址

从对象获取指针很容易:

Usuario user;
Usuario* pUser = &user;
但是它可能会使指针无效,因为
user
处于自动存储中,并且可能在您使用
pUser
之前被销毁

我建议您动态分配
user
,并修改
ChooseService
的构造函数以获取指针:

Usuario* user = new Usuario;
user->usuario = "test";
user->senha = "stackoverflow";
ChooseService cs(user);


//...

ChooseService(Usuario* user) {...}

在您的特定情况下,您的变体可以工作,因为两个对象具有相同的生存期,但从长远来看是危险的。

从对象获取指针很容易:

Usuario user;
Usuario* pUser = &user;
但是它可能会使指针无效,因为
user
处于自动存储中,并且可能在您使用
pUser
之前被销毁

我建议您动态分配
user
,并修改
ChooseService
的构造函数以获取指针:

Usuario* user = new Usuario;
user->usuario = "test";
user->senha = "stackoverflow";
ChooseService cs(user);


//...

ChooseService(Usuario* user) {...}

在您的特定情况下,您的变体可以工作,因为两个对象具有相同的生存期,但从长远来看是危险的。

&user
生成一个
Usuario*
,但是您只会有一个悬空的指针…
&user
生成一个
Usuario*
,但是你只会有一个悬空指针…获取
用户的地址将导致构造函数主体退出后出现悬空指针。也就是说,它会编译,但不会运行。我认为这是给定的,复制它,然后获取地址。重点是,他认为这是一个类型转换,使用的是一个cast,而实际上并不是。将它复制到何处?
ref类
不能按值保存本机对象。问题在于参数是通过值传递的(从而生成副本)。获取
user
的地址将导致构造函数体退出后指针悬空。也就是说,它会编译,但不会运行。我认为这是给定的,复制它,然后获取地址。重点是,他认为这是一个类型转换,使用的是一个cast,而实际上并不是。将它复制到何处?
ref类
不能按值保存本机对象。事实上,这个论点是通过价值传递的(并因此复制了一个副本),这就是问题所在。Luchian崇高的解释,非常感谢。我甚至在facebook上添加了你,如果你在facebook上看到巴西的请求,你知道是我,哈哈,有这么好的程序员在身边真好。我的回答反应过度,但整个下午我的头都撞到了墙上,所以我们开始吧。@Grego:确保你确实
删除了
那个指针,否则你就会有一个典型的内存泄漏。Luchian的精彩解释,非常感谢。我甚至在facebook上添加了你,如果你在facebook上看到巴西的请求,你知道是我,哈哈,有这么好的程序员在身边真好。我的回答反应过度,但整个下午我的头都撞到了墙上,所以我们开始吧。@Grego:确保你确实
删除了
那个指针,否则你就有一个典型的内存泄漏。