Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Видимость класса 
V
    Опции темы
REZiaMIX
Дата 12.5.2012, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 3.11.2007

Репутация: нет
Всего: 4



Есть файл Class1.pl
в нем объявлен package Package1
Код

package Package1;
....
sub SomeSub1()
{
   ...
}


Второй файл Main.pl
в нем указано require для Class1.pl  и объявлен еще один package

Код

require "Class1.pl";


package AnotherPackage;
....
sub SomeSub()
{
      my $packageFromAnotherFile = new Package1(); ## на этой строке
}


как результат этого, на строке с new Package1();
Undefined subroutine &AnotherPackage::Package1 called at A:\Projects\Main.pl line 22.

Какие варианты решения вопроса? Заранее простите за глупый вопрос, только сел изучать Perl после C++ smile


--------------------
user posted image
PM MAIL   Вверх
reiserford
Дата 12.5.2012, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 22
Регистрация: 20.3.2012

Репутация: 1
Всего: 1



- new Package1()
+ new Package1
PM   Вверх
REZiaMIX
Дата 12.5.2012, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 3.11.2007

Репутация: нет
Всего: 4



а если в конструктор класса передаются аргументы , например вот так:
my $packageFromAnotherFile = new Package1("arg1","arg2"); 


--------------------
user posted image
PM MAIL   Вверх
EcSYZ
Дата 12.5.2012, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 21.6.2007

Репутация: 1
Всего: 1



Не не, забудь про эти закидоны с "new Package();"
Надо нормально писать "Package->new();"

PS: а ещё лучше сразу бы исходкики показал да и всё

Это сообщение отредактировал(а) EcSYZ - 12.5.2012, 13:34
PM MAIL WWW   Вверх
REZiaMIX
Дата 12.5.2012, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 3.11.2007

Репутация: нет
Всего: 4



Цитата(EcSYZ @ 12.5.2012,  13:32)
Не не, забудь про эти закидоны с "new Package();"
Надо нормально писать "Package->new();"

PS: а ещё лучше сразу бы исходкики показал да и всё

Спасибо smile Вопрос решен!


--------------------
user posted image
PM MAIL   Вверх
DurRandir
Дата 12.5.2012, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 335
Регистрация: 27.9.2009

Репутация: 14
Всего: 17



Indirect syntax (method-space-object) не то, чтобы абсолютное зло, но может привести к довольно трудноотливливаемым ошибкам и неочевидным сообщениям. В данном случае, вы вместо "Can't locate object method "new" via package" получаете то, что получаете). Причин для этого две:

1) Package1 подключается не в compile-time через use, а в runtime через require
2) У вас в AnotherPackage так же объявлен метод new, причём выше по коду, чем эти строчки.

И для перла ваш вызов выглядит как my $packageFromAnotherFile = new(Package1()). Либо подключайте в compile-time дополнительные модули, либо не делайте indirect вызовов, т.е. пишите my $packageFromAnotherFile = Package1->new();

Это сообщение отредактировал(а) DurRandir - 12.5.2012, 13:36
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.6805 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.