Pyproj PyPI устарел. Вы можете установить GeoPandas через Conda или выполнить действия, описанные в этом выпуске GH https://github.com/geopandas/geopandas/issues/793 , и предварительно установить pyproj из Github через
pip install git+https://github.com/jswhit/pyproj.git#egg=pyproj
[ 114], а затем перейти к pip install geopandas
.
"Двойная звезда" является указателем на указатель. Так NSError **
указатель на указатель на объект типа NSError
. Это в основном позволяет, Вы для возврата ошибки возражаете от функции. Можно создать указатель на NSError
объект в функции (назовите его *myError
), и затем сделайте что-то вроде этого:
*error = myError;
, чтобы "возвратить" ту ошибку вызывающей стороне.
<час>В ответ на комментарий, добавленный ниже:
Вы не можете просто использовать NSError *
, потому что в C, параметры функции передаются значением — то есть, значения , скопировал при передаче функции. Для иллюстрирования рассмотрите этот отрывок кода C:
void f(int x)
{
x = 4;
}
void g(void)
{
int y = 10;
f(y);
printf("%d\n", y); // Will output "10"
}
переназначение x
в [1 110] не влияет на значение аргумента за пределами [1 111] (в [1 112], например).
Аналогично, когда указатель передается в функцию, ее значение копируется, и переприсвоение не будет влиять на значение за пределами функции.
void f(int *x)
{
x = 10;
}
void g(void)
{
int y = 10;
int *z = &y;
printf("%p\n", z); // Will print the value of z, which is the address of y
f(z);
printf("%p\n", z); // The value of z has not changed!
}
, Конечно, мы знаем, что можем изменить значение какой z
точки к довольно легко:
void f(int *x)
{
*x = 20;
}
void g(void)
{
int y = 10;
int *z = &y;
printf("%d\n", y); // Will print "10"
f(z);
printf("%d\n", y); // Will print "20"
}
, Таким образом, это выдерживает обосновать, что, для изменения значения того, что NSError *
точки к, мы также должны передать указатель на указатель.
В C все - передача значением. Если Вы хотите изменить значение чего-то, что Вы передаете адрес его (который передает значение адреса памяти). Если Вы хотите измениться, где указатель указывает на передачу адреса указателя.
В C двойная звезда является указателем на указатель. Существует несколько причин сделать это. Сначала то, что указатель мог бы быть к массиву указателей. Другая причина состояла бы в том, чтобы передать указатель на функцию, где функция изменяет указатель (подобный параметр на других языках).
Если это - что-нибудь как C тогда **
, означает указатель на указатель.