【问题标题】:change variable value by reference c++/windows forms通过引用 c++/windows 窗体更改变量值
【发布时间】:2013-08-09 12:46:36
【问题描述】:

我正在尝试通过引用(使用函数)来更改变量值。

我的功能:

void chgVariable(String^ *trgvari,String^ trgvarival)
{
 *trgvari = trgvarival;
}

我的变量:

String^ myStringVar;

如何使用:

chgVariable(&myStringVar, gcnew String("Test"));

但我收到此错误:

无法将参数 1 从 'cli::interior_ptr' 转换为 'String ^*'

【问题讨论】:

  • 您是否尝试过使trgvari 参数成为正确的C++ 引用而不是指向C++CLI“指针”的指针?例如。将其声明为String^& trgvari,然后在调用函数时不使用地址运算符传递它。
  • 同样的错误。我正在“私有区域”私有中“创建”变量:System::ComponentModel::Container ^components;字符串^ myStringVar;有问题吗?
  • 您需要使用托管引用:void chgVariable(String^% trgvari, String^ trgvarival)

标签: winforms c++-cli


【解决方案1】:

你对第一个参数的定义是错误的。应该是:

void chgVariable(String* ^trgvari,String^ trgvarival)

如果您以String^ myStringVar 开头,则&myStringVar 成为指向String^ 的指针,显示为String*^

另外,现在当你取消引用它时,你应该得到String^,就像你想要的那样。

编辑:

不幸的是,C++CLI 不允许指向句柄的指针,因此您应该像这样将它作为对句柄的引用:

void chgVariable(String^% trgvari,String^ trgvarival)

并将 &myStringVar 更改为 myStringVar

感谢其他 stackoverflow 问题:Pass an argument by reference in C++/CLI so re-assignment affects the caller

【讨论】:

  • 现在我收到此错误:'不允许使用指向 C++/CLI 引用类或接口类的普通指针'
  • 呸,这就是我不喜欢 C++CLI 的原因 :)。尝试改为 String^^ trgvari%myStringVar
  • 这在我在函数内部创建变量时有效,但是当我在函数外部创建时不起作用
  • 好的,我又看了看周围,我已经更新了我的答案。
  • 当我使用 'String^ ^trgvari' 我得到这个错误:'handle to handle,pointer, or reference is not allowed'
猜你喜欢
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-02
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多