标题:下面的c++/cli程序为什么编译错?
只看楼主
yn_88
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2022-10-30
 问题点数:0 回复次数:1 
下面的c++/cli程序为什么编译错?
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
不会出错,运行正确

这是什么原因?

搜索更多相关主题的帖子: String int 编译 System index 
2022-10-30 12:45
yn_88
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2022-10-30
得分:0 
没注意原型是: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; 问题得到解决!
2022-10-30 15:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-510488-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033741 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved