我也是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
}
来自编译器的消息:
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 ==========
我知道,编译器无法将一种类型转换为另一种类型,我知道我必须将^ Uri传递给GetAsync。但我不知道该怎么做。 日Thnx。
答案 0 :(得分:3)
在C ++ / CX中,通常使用ref new实例化对象,返回一个引用计数的对象句柄。修复代码的最简单方法是替换
Uri url(mystr);
与
Uri^ url = ref new Uri(mystr);
当编译器超出范围时,编译器将生成代码以减少url
上的引用计数。当引用计数达到零时,该对象将自动销毁。
答案 1 :(得分:-1)
编译器告诉你问题
无法转换来自&#39; Windows :: Foundation :: Uri&#39;到&#39; Windows :: Foundation :: Uri ^&#39;
修复方法是使用#34;的托管&#34;地址;运算符%
,cli.GetAsync(%url);
。您可以通过一个非常简单的测试程序看到同样的问题:
ref class Foo sealed {};
void f(Foo^) {}
int main(array<System::String ^> ^args)
{
Foo foo;
f(%foo);
return 0;
}
请注意,由于您正在调用*Async()
方法,因此您可能需要认真考虑使用C#。