【问题标题】:Very basic? C++/CLI problem很基础? C++/CLI 问题
【发布时间】:2011-02-23 19:28:39
【问题描述】:

我正在使用 VC++ 2010。

我收到错误 C2228。它说它必须是 .Text 之前的结构、类或联合。

private: System::Void textBox1_TextChanged(System::Object^  sender, System::EventArgs^  e) {
    using namespace std;
    for(int r=0; r>(sizeof(x)/sizeof(x[0])); r++){
        if (x[r][1].find(textBox1.Text) != string::npos){
            label1.Text = (label1.Text+x[r][1]);
            label2.Text = (label1.Text+x[r][2]);
        }
    }
}

它基本上搜索一个 2D 数组并查看是否有任何内容与您输入的内容匹配并在您输入时显示它,这是我正在制作的应用程序的主要功能。 它在 if 语句上出错,在它之后的两个语句两次就是这样,.Text 在所有 5 次尝试读取它时都出现错误,与我上面发布的错误相同。

【问题讨论】:

  • 信息不足。你甚至没有给出行号。但是textBox1label1 出了点问题... 不是你想的那样。而且,顺便说一句,我认为您的意思是最后一行的label2
  • 成员 textBox1 定义了吗? label1 & label2 定义了吗?
  • @Ashley:因为不是。它是 C++/CLI,微软的 C++/.NET 混合体。它不是 C++,因为 1) WinForms 在 C++ 中不可用,2) ^ 引用在 C++ 中无效。
  • @Ashley Davies:它不是 C++,因为它使用 .Net 类型,而 C++ 不是 .Net 语言。也许它是一种有点相似的编程语言,称为 C++/CLI (en.wikipedia.org/wiki/C%2B%2B/CLI)。另请参阅stackoverflow.com/questions/2245196/c-urban-myths/…
  • 抱歉,我对此一无所知,有点误导,因为它在项目选择窗口上显示 C++。谢谢你告诉我

标签: winforms c++-cli


【解决方案1】:

你应该使用 -> 而不是 .

像这样:textBox1->Text->ToString() 或 label1->Text

【讨论】:

  • 修复了我的 .Text 错误,但我现在得到了这些:错误 1 ​​错误 C2664: 'unsigned int std::basic_string<_elem>::find(const std:: basic_string<_elem> &,unsigned int) const' : 不能将参数 1 从 'System::String ^' 转换为 'const std::basic_string<_elem> &' 还有两个关于 + 不考虑右边的任何东西
  • @Ashley Davies 原因是您使用的是 STL,而 STL 类型不能与托管类型一起使用。您可能应该改用 STL.Net。有关 STL.NET 的介绍,请参见此处。 msdn.microsoft.com/en-us/library/ms379600%28v=vs.80%29.aspx 或这里codeguru.com/columns/kate/article.php/c10297
  • @Ashley Davies 或者改用 .NET 容器(来自 System::Collections::Generic)
【解决方案2】:

试试这个:

using namespace std;

private: 
    System::Void textBox1_TextChanged(System::Object^  sender, System::EventArgs^  e) {
        for(int r=0; r > (sizeof(x) / sizeof(x[0])); r++) {
            if (x[r][1].find(textBox1.Text) != string::npos){
            label1.Text = (label1.Text + x[r][1]);
            label2.Text = (label1.Text + x[r][2]);
            }
        }
    }

using 命令应该是最高级别的,这样格式会更好。希望能解决问题。

【讨论】:

  • 感谢您的帮助,(编辑)我通过将它放在我的预处理器行下方来修复所有错误,但它仍然给出相同的错误。
  • 实际上,Asley 仅在函数内部使用命名空间 std 是件好事。从外观上看,该方法是在标头中声明的,使用 using namespace std; 并不是一个好主意;在文件范围的标题中。在课堂范围内可能没问题。无论如何,这不是它不起作用的原因,而是她 userr 的事实。在参考文献上而不是 -> 她应该这样做
  • 他*;在另一个答案中,我将它们更改为 -> 但我有一个我不理解的错误,然后两个说 + 符号不接受它右侧的任何内容。我在那个问题上发布了他们。
猜你喜欢
  • 2010-11-13
  • 2011-08-21
  • 2011-05-29
  • 2013-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多