Получение имени одной функцией
#1

Здравствуйте, сабж.
Вот что у меня получилось:
Код:
public GetPlName(playerid)
{
	new playername[64];
	GetPlayerName(playerid, playername, sizeof(playername));
	return playername;
}
Ошибка:
Код:
new_serv.pwn(38) : error 090: public functions may not return arrays (symbol "GetPlName")
Строка 38 - return playername;
Reply
#2

Нельзя вернуть в return'e массив char. Что мешает передавать в функцию указатель на массив? хотя тогда теряется весь смысл этой функции.
Reply
#3

[delete]
Reply
#4

Я так и понял, а как тогда мне сделать такую функцию?
Reply
#5

Первый раз вижу, что компилятор ругается на возвращение string'а. Попробуй размер не 64, а MAX_PLAYER_NAME поставить... А что нельзя ретурнить массив - бред. Бета-тестеры сампа сами публиковали такой код.
Reply
#6

pawn Код:
GetPlName(playerid)
{
    new playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid, playername, MAX_PLAYER_NAME);
    return playername;
}
это должна быть функция, а не колбек!
Reply
#7

public не может вернуть массив, а stock может.
Reply
#8

Quote:
Originally Posted by OKStyle
Посмотреть сообщение
Первый раз вижу, что компилятор ругается на возвращение string'а. Попробуй размер не 64, а MAX_PLAYER_NAME поставить... А что нельзя ретурнить массив - бред. Бета-тестеры сампа сами публиковали такой код.
В sa-mp 0.1b можно было, потом компилятор обновили(в 0.2) и стало нельзя
Reply
#9

оффтоп: напомнило старый анекдот:
Quote:

Звонок в компьютерную контору:
- С моим компьютером проблемы, он не включается...
- Как не включается?
- Да пишет все время: "Вставьте дискету, вставьте дискету..."
- А вы вставляли?
- Нет... Как-то не догадался.

Quote:
Originally Posted by Crystal_Speed
Посмотреть сообщение
Ошибка:
Код:
new_serv.pwn(38) : error 090: public functions may not return arrays (symbol "GetPlName")
О описании ошибки написано, public функции не могут возвращать массивы (= строки в павн). Все, не больше не меньше. А тут начинается, раньше можно было, как-то странно и так далее
Ведь компилятор явно пишет, что либо не возвращай строку, либо не объявляй функцию public.
Reply
#10

Quote:
Originally Posted by dimonml
Посмотреть сообщение
А тут начинается, раньше можно было, как-то странно и так далее
Ведь компилятор явно пишет, что либо не возвращай строку, либо не объявляй функцию public.
В старой версии компилятора, public функции могли возвращать массивы. Поэтому окстайл видел подобный код у бета тестеров
Reply
#11

Quote:

public не может вернуть массив, а stock может.

Тогда я для себя тоже нового узнал.

А теперь викторина:

Почему нет функции GetPlayerName, которая возвращает массив?
Reply
#12

jhonyxakep, а зачем она нужна? разработчики подумали о гибкости языка, напиши свою функцию. В разных случаях нам нужно вернуть разные длины массивов, иногда это неудобно. (20 или 24 или 18 мб вообще 12)
Reply
#13

Quote:

В разных случаях нам нужно вернуть разные длины массивов, иногда это неудобно. (20 или 24 или 18 мб вообще 12)

Тогда почему все-еще не ввели отдельные типы для строковых значений?? Неужели беспомощность разработчиков?
Reply
#14

jhonyxakep, зачем? и так хорошо. В С ведь тоже нету отдельного типа строки, там тоже массивы символов (:
Reply
#15

pawn, если я правильно понял сайт разработчиков (языка): это язык для встраиваемых систем, а у него могут быть совсем другие критерии оптимальности, полноты, эффективности языка, чем те, которые хочется видеть разработчикам игровых режимов хД (рантайм может работать в любом контроллере освещения - значит язык хороший)
Reply
#16

Quote:

В С ведь тоже нету отдельного типа строки, там тоже массивы символов (:

И по вашему больше никаких типов данных там нет?

Quote:

pawn, если я правильно понял сайт разработчиков (языка): это язык для встраиваемых систем, а у него могут быть совсем другие критерии оптимальности, полноты, эффективности языка, чем те, которые хочется видеть разработчикам игровых режимов хД (рантайм может работать в любом контроллере освещения - значит язык хороший)

Самп использует не более 30% возможностей Pawn, мало того они все еще компилируют самп с древней версией Pawn, в котором были ошибки памяти, да и возможностей поменьше.

Например Pawn умеет самостоятельно вызывать функции в DLL, без всяких плагинов... Ну вот почему этого нет в сампе?

А вообще обо всех упущениях можно посмотреть тут: http://www.compuphase.com/pawn/pawnhistory.htm
Reply
#17

Тоже сегодня копался на том сайте, делал новую сборку программы... Но в дистрибутиве косячные инклюды, а после исправления - крэшит самп после запуска скомпилированного на этих инклюдах скрипта.
Reply
#18

Quote:

Но в дистрибутиве косячные инклюды

Эт как так, в компиляторе свои-же инклюды косячные?

Quote:

а после исправления - крэшит самп после запуска скомпилированного на этих инклюдах скрипта.

Вы это еще и в самп решили запихнуть? печально...

На том сайте ничего самповского нет. На нем есть тот самый Pawn(он же SMALL), который использует самп (и некоторые другие проекты). Конкретно я упомянул, что в сампе встроена слишком старая версия языка, которая уже давно не актуальна, мало того имеет в себе кучу ошибок.
Reply
#19

Quote:
Originally Posted by jhonyxakep
Посмотреть сообщение
Эт как так, в компиляторе свои-же инклюды косячные?.
Стоит посмотреть код, как становится всё видно. В некоторых местах не хватает знака ;.

Quote:
Originally Posted by jhonyxakep
Посмотреть сообщение
Вы это еще и в самп решили запихнуть? печально...
Печально то, что Вы не знаете, о чём говорите. В сампе те же самые инклюды (без приставки a_ которые), только без некоторых новых функций, которые, как я понимаю, появились в новой версии языка.
Reply
#20

Quote:
Originally Posted by OKStyle
Посмотреть сообщение
Стоит посмотреть код, как становится всё видно. В некоторых местах не хватает знака ;.
Стоит посмотреть спецификацию языка, где написано, что ; не является обязательным. А если посмотреть с какими параметрами по умолчанию всеми любимый pawno, запускает компилятор
Код:
pawncc -;+ -(+ <путь_к_pwn>
И изучить справку к компилятору, которую тот выдает будучи запущенным без аргументов, то становиться понятно, с какой радости в сампе стала точка с запятой обязательной (и круглые скобки при вызове функций тоже)

Quote:
Originally Posted by OKStyle
Посмотреть сообщение
Печально то, что Вы не знаете, о чём говорите. В сампе те же самые инклюды (без приставки a_ которые), только без некоторых новых функций, которые, как я понимаю, появились в новой версии языка.
Похоже, что он знает о чем говорит. Если почитать pdf о встраивании pawn (в которых и описаны функции, о которых ты говоришь), то станет понятно, что инклюды без соответствующей поддержки со стороны рантайм-машины pawn (самп сервера в нашем случае) ничего дать не могут. Те инклюды лишь говорят компилятору, о том, что у павн машины есть такие-то функции с такими прототипами, но не более того.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)