错误C2228左边的' .size'必须在Winform上有class / struct / union

时间:2017-05-19 18:23:55

标签: string winforms c++-cli

我正在使用C ++在Winform上创建我的第一个程序。我有一个函数和一个字符串输入。但是,当我运行该程序时,text.size()"Error C2228 left of '.size' must have class/struct/union"

会出现以下错误

相关代码:

private: System::Void bntGet_Click(System::Object^  sender, System::EventArgs^  e) {
    in_itext = txtText->Text;
    itext = Convert::ToString(in_itext);
        for (Int32 index = 1; index <= itext.size(); index++)
        {
            if (itext[index] == '@')
            {

                while (itext[index - 1] != ' ')
                {
                    index--;
                }
                while (itext[index] != ' ')
                {
                    next_email += itext[index];
                    index++;
                    if (itext[index] == '\0')
                        break;
                }
                break;

            }
        }
    txtEmail->Text = next_email;
}

有什么建议吗?谢谢大家!

1 个答案:

答案 0 :(得分:1)

标准警告:虽然可以在C ++ / CLI中编写应用程序的主体,甚至使用WinForms在C ++ / CLI中编写GUI,但不建议这样做。 C ++ / CLI适用于互操作场景:C#或其他.Net代码需要与非托管C ++接口,C ++ / CLI可以提供两者之间的转换。对于主要开发,如果您需要托管代码,建议使用带有WinForms或WPF的C#,如果您想要不受管理,建议使用带有MFC的C ++。

那说:

for (Int32 index = 1; index <= itext.size(); index++)

  

&#34;错误C2039&#39;长度&#39;:不是&#39; System :: String&#39;&#39;

的成员

大小不是你在.Net中获得System::String长度的方式。为此,您需要Length属性。你第二次尝试就接近了,但你需要一个资本&#34; L&#34;。 (size()std::string执行此操作的方式,但std::string是与System::String完全不同的野兽。)

其他问题:

in_itext = txtText->Text;
itext = Convert::ToString(in_itext);

它已经是一个字符串,你不需要转换它。

while (itext[index - 1] != ' ')
{
    index--;
}

如果这样做,您可以轻松地运行字符串的开头。 (当索引等于零时,您将获得异常。)对零添加一个检查。

while (itext[index] != ' ')
{
    next_email += itext[index];
    index++;
    if (itext[index] == '\0')
        break;
}

.Net中的字符串不是以空值终止的,您需要检查长度。

如果我们后退一步,你实际上试图在这里解决什么问题?我最好的猜测是,您在中间某处有一些带有电子邮件地址的文本,而您只想提取电子邮件地址。如果是这种情况,那么我可能会尝试使用正则表达式来提取电子邮件地址。您可以使用.Net库的全部功能,使用它!有关要使用的正则表达式,请参阅Using a regular expression to validate an email address,并使用introduction pageclass reference阅读正则表达式。