注册 登录
编程论坛 VC.NET论坛

下面的c++/cli程序为什么编译错?

yn_88 发布于 2022-10-30 12:45, 617 次点击
using namespace System;
int main()
{
  StringComparison^ sc=StringComparison::OrdinalIgnoreCase;
  String ^s1="Computer Language Learning";
  String ^s2="language";
  int index=s1->IndexOf(s2,sc);
  Console::WriteLine("{0}",index);
  return 0;
}
上面的程序编译: cl /clr t.cpp
出现编译错误:
error C2664: “int System::String::IndexOf(wchar_t,int)”: 不能将参数 1 从“System::String ^”转换为“wchar_t”
        没有用户定义的转换运算符,或者
        没有使该转换得以执行的上下文

s1->IndexOf(s2,sc); 为什么会被认为是调用这个重载:int System::String::IndexOf(wchar_t,int)
我查了net 的String类的方法,是有下面这个重载方法的:
public int IndexOf(
    string value,
    StringComparison comparisonType
)

把这个程序改为c# 版本:
using System;
class program {
   static void Main()
   {
     StringComparison sc=StringComparison.OrdinalIgnoreCase;
     string s1="Computer Language learning";
     string s2="languag";
     int index=s1.IndexOf(s2,sc);
     Console.WriteLine("{0}",index);
   }
}
编译: csc t.cs
不会出错,运行正确

这是什么原因?

1 回复
#2
yn_882022-10-30 15:08
没注意原型是:public int IndexOf(string value, StringComparison comparisonType);
而不是 public int IndexOf(string value, StringComparison^ comparisonType);

using namespace System;
int main()
{
  StringComparison^ sc=StringComparison::OrdinalIgnoreCase;
  String ^s1="Computer Language Learning";
  String ^s2="language";
  int index=s1->IndexOf(s2,sc);
  Console::WriteLine("{0}",index);
  return 0;
}
把红色那句改为:StringComparison sc=StringComparison::OrdinalIgnoreCase; 问题得到解决!
1