^GetAsync的Uri 我在UWP和C++都是新的。 我正在尝试编写一个处理http api的简单应用程序。 我的例子是: void ForecastFromMSW::MainPage::GetTheCity(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) { String ^mystr = "http://google.com"; // creating a string object Uri url(mystr); // crating an url object HttpClient cli; //creating an object of HttpClient cli.GetAsync(url); // pass url object to cli }

^GetAsync的Uri 我在UWP和C++都是新的。 我正在尝试编写一个处理http api的简单应用程序。 我的例子是: void ForecastFromMSW::MainPage::GetTheCity(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) { String ^mystr = "http://google.com"; // creating a string object Uri url(mystr); // crating an url object HttpClient cli; //creating an object of HttpClient cli.GetAsync(url); // pass url object to cli },uwp,c++-cx,Uwp,C++ Cx,来自编译器的消息: 1>------ Build started: Project: ForecastFromMSW, Configuration: Debug Win32 ------ 1> MainPage.xaml.cpp 1>c:\users\9maf4you\documents\visual studio 2015\projects\forecastfrommsw\forecastfrommsw\mainpage.xaml.cpp(38): error C2664:

来自编译器的消息:

1>------ Build started: Project: ForecastFromMSW, Configuration: Debug Win32 ------
1>  MainPage.xaml.cpp
1>c:\users\9maf4you\documents\visual studio 2015\projects\forecastfrommsw\forecastfrommsw\mainpage.xaml.cpp(38): error C2664: 'Windows::Foundation::IAsyncOperationWithProgress<Windows::Web::Http::HttpResponseMessage ^,Windows::Web::Http::HttpProgress> ^Windows::Web::Http::HttpClient::GetAsync(Windows::Foundation::Uri ^,Windows::Web::Http::HttpCompletionOption)': cannot convert argument 1 from 'Windows::Foundation::Uri' to 'Windows::Foundation::Uri ^'
1>  c:\users\9maf4you\documents\visual studio 2015\projects\forecastfrommsw\forecastfrommsw\mainpage.xaml.cpp(38): note: No user-defined-conversion operator available, or
1>  c:\users\9maf4you\documents\visual studio 2015\projects\forecastfrommsw\forecastfrommsw\mainpage.xaml.cpp(38): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
========== Deploy: 0 succeeded, 0 failed, 0 skipped ==========
1>----构建已启动:项目:ForecastFromMSW,配置:调试Win32------
1> MainPage.xaml.cpp
1> c:\users\9maf4you\documents\visual studio 2015\projects\forecastfrommsw\forecastfrommsw\mainpage.xaml.cpp(38):错误C2664:'Windows::Foundation::IAsyncOperationWithProgress^Windows::Web::Http::HttpClient::GetAsync(Windows::Foundation::Uri^,Windows::Web::Http::HttpCompletionOption)“:无法将参数1从“Windows::Foundation::Uri”转换为“Windows::Foundation::Uri^”
1> c:\users\9maf4you\documents\visual studio 2015\projects\forecastfrommsw\forecastfrommsw\mainpage.xaml.cpp(38):注意:没有用户定义的转换运算符可用,或者
1> c:\users\9maf4you\documents\visual studio 2015\projects\forecastfrommsw\forecastfrommsw\mainpage.xaml.cpp(38):注意:没有用户定义的转换运算符可以执行此转换,或者无法调用该运算符
======生成:0成功,1失败,0最新,0跳过==========
=========部署:0成功,0失败,0跳过==========
我明白了,编译器无法将一种类型转换为另一种类型,我知道我必须将^Uri传递给GetAsync。但我不知道该怎么办。
Thnx.

编译器告诉了您这个问题

无法将参数1从“Windows::Foundation::Uri”转换为“Windows::Foundation::Uri^”

修复方法是使用托管的“address of”操作符,即
%
cli.GetAsync(%url)。您可以通过一个非常简单的测试程序看到同样的问题:

ref class Foo sealed {};
void f(Foo^) {}

int main(array<System::String ^> ^args)
{
    Foo foo;
    f(%foo);
    return 0;
}
ref类Foo密封{};
无效f(Foo^{}
int main(数组^args)
{
富富,;
f(%foo);
返回0;
}

注意,既然你调用了一个<>代码> *yasc]()/Cux>方法,你可能想认真考虑在C++中使用C ^ ../p>,对象通常使用返回一个REF计数的对象句柄来实例化。修复代码的最简单方法是替换

Uri url(mystr);


编译器将生成代码,以在
url
超出范围时减少ref计数。当引用计数达到零时,对象将自动销毁。

问题是关于C++/CX,而不是C++/CLI。你的答案不适用。
Uri^ url = ref new Uri(mystr);