Re: Нет такой функции при сборке
От: Vi2 Удмуртия http://www.adem.ru
Дата: 26.09.02 12:33
Оценка: 4 (1)
Здравствуйте Corvin, Вы писали:

C>Такой проблем: Есть хедер и реализация функций в срр. Но что-то в настройках проекта не так, из-за чего он считает, что у меня все определения инлайн и в результате считает, что моя функция определена дважды: хедере и в срр. Где это можно отклюцить, кто знает? плз, подскажите


Почему дважды, если Linker Tools Error LNK2001 — unresolved external symbol "symbol"? Неразрешённая, т.е. нет такой функции при сборке.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Help, - LNK2001 error
От: Corvin Украина  
Дата: 26.09.02 11:34
Оценка:
Такой проблем: Есть хедер и реализация функций в срр. Но что-то в настройках проекта не так, из-за чего он считает, что у меня все определения инлайн и в результате считает, что моя функция определена дважды: хедере и в срр. Где это можно отклюцить, кто знает? плз, подскажите
Re: Help, - LNK2001 error
От: comer США http://getboost.codeplex.com/
Дата: 26.09.02 11:41
Оценка:
Здравствуйте Corvin, Вы писали:

C>Есть хедер и реализация функций в срр.


Пакеж.
getboost.codeplex.com
citylizard.codeplex.com
Re[2]: Help, - LNK2001 error
От: Corvin Украина  
Дата: 26.09.02 11:44
Оценка:
Здравствуйте comer, Вы писали:

C>Здравствуйте Corvin, Вы писали:


C>>Есть хедер и реализация функций в срр.


C>Пакеж.

Да, пожалуйста, ничего особенного:

threads.h
.......
/* thread management */
BOOL    CreateThreadSyncResources(void);
BOOL    DestroyThreadSyncResources(void);
.....


threads.cpp
BOOL CreateThreadSyncResources(void)
{
............
}
BOOL DestroyThreadSyncResources(void)
{
.............
}

Никаких специфических precompiler definitions нет...
Re[3]: Help, - LNK2001 error
От: Vasiliy_Krasnokutsky Россия  
Дата: 26.09.02 11:51
Оценка:
Здравствуйте Corvin,
Приведи минимальный код на котором воспроизводиться ошибка.
Я не думаю, что это можно отключить в опциях, скорее всего ошибка в коде.
С таким кодом, который ты привел, можно посоветовать читать MSDN самому ...

С Уважением Краснокутский Василий
Re[3]: Help, - LNK2001 error
От: __Avatar__ Украина  
Дата: 26.09.02 11:55
Оценка:
а попробуй так
threads.h
#ifndef __HEADER__
#define __HEADER__
.......
/* thread management */
BOOL    CreateThreadSyncResources(void);
BOOL    DestroyThreadSyncResources(void);
.....
#endif


или елси под VC вставь #pragma once в начале threads.h
Все что ни происходит — к лучшему!
Re[4]: Help, - LNK2001 error
От: Corvin Украина  
Дата: 26.09.02 11:55
Оценка:
Здравствуйте Vasiliy_Krasnokutsky, Вы писали:

VK>Здравствуйте Corvin,

VK>Приведи минимальный код на котором воспроизводиться ошибка.
VK>Я не думаю, что это можно отключить в опциях, скорее всего ошибка в коде.
VK>С таким кодом, который ты привел, можно посоветовать читать MSDN самому ...

VK>С Уважением Краснокутский Василий

просто дело в том, что ошибка вываливается на уровне связывания файлов проекта и до кода дело не доходит, — с каким-то конкретным местом в программе это не связано... В частности если щелкнуть по ф-ции правой клавишей и нажать goto definition..., то вывалится окошко "resolve ambiguity", где будут ссылки на место в хедере и в срр. А в МСДН"е написано про возможность возникновения такого и сказано, что нужно, вроде как выключить инлайнинг, но где и как его выключить ниче не сказано...
Re[4]: Help, - LNK2001 error
От: Corvin Украина  
Дата: 26.09.02 12:09
Оценка:
Здравствуйте __Avatar__, Вы писали:

A> а попробуй так

A>threads.h
A>
A>#ifndef __HEADER__
A>#define __HEADER__
A>.......
A>/* thread management */
A>BOOL    CreateThreadSyncResources(void);
A>BOOL    DestroyThreadSyncResources(void);
A>.....
A>#endif
A>


A>или елси под VC вставь #pragma once в начале threads.h


A>

Не помогло....
Re[5]: Help, - LNK2001 error
От: comer США http://getboost.codeplex.com/
Дата: 26.09.02 12:09
Оценка:
Здравствуйте Corvin, Вы писали:

C>А в МСДН"е написано про возможность возникновения такого и сказано, что нужно, вроде как выключить инлайнинг, но где и как его выключить ниче не сказано...


А как написано? Просто не хочу ковырять MSDN.
И все таки, надеюсь, что это проблема с проектом, то ли в каком то файле есть что вроде #include "threads.cpp", то ли еще какая нибудь ерунда.
getboost.codeplex.com
citylizard.codeplex.com
Re[6]: Help, - LNK2001 error
От: Corvin Украина  
Дата: 26.09.02 12:12
Оценка:
Здравствуйте comer, Вы писали:

C>Здравствуйте Corvin, Вы писали:


C>>А в МСДН"е написано про возможность возникновения такого и сказано, что нужно, вроде как выключить инлайнинг, но где и как его выключить ниче не сказано...


C>А как написано? Просто не хочу ковырять MSDN.

C>И все таки, надеюсь, что это проблема с проектом, то ли в каком то файле есть что вроде #include "threads.cpp", то ли еще какая нибудь ерунда.


Пишут такое:
Linker Tools Error LNK2001

A project that uses function inlining yet defines the functions in a .CPP file rather than in the header file can cause LNK2001.

или если посмотреть в Function Inlining Problems:
If you are using function inlining make sure that you

Have the inline functions implemented in the header file you are going to include in other files


Have inlining turned ON in the header file.
If you are using the #pragma inline_depth compiler directive, make sure you have a value of 2 or greater set. A value of zero will turn off inlining. Also make sure you are using the /Ob1 or /Ob2 compiler options. These are available in the Project Settings dialog box. (See the "Optimizations" category on the C/C++ tab.)

Mixing inline and non-inline compile options on different modules can sometimes cause problems. If a C++ library is created with function inlining turned on (/Ob1 or /Ob2) but the corresponding header file describing the functions has inlining turned off (no option), you will get error LNK2001. The functions do not get inlined into the code from the header file, but since they are not in the library file there is no address to resolve the reference.

Similarly, a project that uses function inlining yet defines the functions in a .CPP file rather than in the header file will also get error LNK2001. The header file is included everywhere deemed appropriate, but the functions are only inlined when the .CPP file passes through the compiler. Therefore the linker sees the functions as unresolved externals when used in other modules.
Re[5]: Help, - LNK2001 error
От: __Avatar__ Украина  
Дата: 26.09.02 12:13
Оценка:
Здравствуйте Corvin, Вы писали:

C>Здравствуйте __Avatar__, Вы писали:


A>> а попробуй так

A>>threads.h
A>>
A>>#ifndef __HEADER__
A>>#define __HEADER__
A>>.......
A>>/* thread management */
A>>BOOL    CreateThreadSyncResources(void);
A>>BOOL    DestroyThreadSyncResources(void);
A>>.....
A>>#endif
A>>


A>>или елси под VC вставь #pragma once в начале threads.h


A>>

C>Не помогло....
А если на крайний случай так же "закомментировать" и threads.cpp?
Все что ни происходит — к лучшему!
Re[6]: Help, - LNK2001 error
От: Corvin Украина  
Дата: 26.09.02 12:15
Оценка:
Здравствуйте __Avatar__, Вы писали:

да та же хрень.....
Re[6]: Help, - LNK2001 error
От: comer США http://getboost.codeplex.com/
Дата: 26.09.02 12:17
Оценка:
Кстати, а может вот есть уже такие функции с такими именами и интерфесом
в одной из библиотек которые ты подключаешь к своему проекту?

CreateThreadSyncResources(void);
DestroyThreadSyncResources(void);

Третьего варианта не знаю.
getboost.codeplex.com
citylizard.codeplex.com
Re[7]: Help, - LNK2001 error
От: comer США http://getboost.codeplex.com/
Дата: 26.09.02 12:27
Оценка:
C>If you are using the #pragma inline_depth compiler directive, make sure you have a value of 2 or greater set. A value of zero will turn off inlining. Also make sure you are using the /Ob1 or /Ob2 compiler options. These are available in the Project Settings dialog box. (See the "Optimizations" category on the C/C++ tab.)

Ну попробуй установить /Ob1 опцию для проекта. Хотя, думаю дело не в этом. У тебя просто тела функции в заголовочном файле все равно нет, так что линкер здесь вряд ли ругаться сможет.
getboost.codeplex.com
citylizard.codeplex.com
Re[5]: Help, - LNK2001 error
От: Анатолий СССР  
Дата: 26.09.02 12:31
Оценка:
А если так, раз уж такая пьянка пошла
#ifndef __HEADER__
#define __HEADER__
.......
/* thread management */
extern BOOL    CreateThreadSyncResources(void);
extern BOOL    DestroyThreadSyncResources(void);
.....
#endif
Re[6]: Help, - LNK2001 error
От: Corvin Украина  
Дата: 26.09.02 12:34
Оценка:
Здравствуйте Анатолий, Вы писали:

А>А если так, раз уж такая пьянка пошла

А>
А>#ifndef __HEADER__
А>#define __HEADER__
А>.......
А>/* thread management */
А>extern BOOL    CreateThreadSyncResources(void);
А>extern BOOL    DestroyThreadSyncResources(void);
А>.....
А>#endif
А>

Хрен! все то же пишет:
РrinterMonitor.obj : error LNK2001: unresolved external symbol "int __cdecl DestroyThreadSyncResources(void)" (?DestroyThreadSyncResources@@YAHXZ)
, причем интересно откуда он взял int __cdecl ...
Re[2]: Нет такой функции при сборке
От: Corvin Украина  
Дата: 26.09.02 12:36
Оценка:
Здравствуйте Vi2, Вы писали:

Vi2>Здравствуйте Corvin, Вы писали:


C>>Такой проблем: Есть хедер и реализация функций в срр. Но что-то в настройках проекта не так, из-за чего он считает, что у меня все определения инлайн и в результате считает, что моя функция определена дважды: хедере и в срр. Где это можно отклюцить, кто знает? плз, подскажите


Vi2>Почему дважды, если Linker Tools Error LNK2001 — unresolved external symbol "symbol"? Неразрешённая, т.е. нет такой функции при сборке.


Vi2>

Не, по-моему, ты неправ, неразрешенная значит, что есть несколько вариантов и неясно, какой выбрать
Re[3]: Нет такой функции при сборке
От: Vi2 Удмуртия http://www.adem.ru
Дата: 26.09.02 12:38
Оценка:
Здравствуйте Corvin, Вы писали:

C>Не, по-моему, ты неправ, неразрешенная значит, что есть несколько вариантов и неясно, какой выбрать


Не несколько вариантов, а ни одного. Разницу чувствуешь?
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[4]: Нет такой функции при сборке
От: Corvin Украина  
Дата: 26.09.02 12:43
Оценка:
Здравствуйте Vi2, Вы писали:

Vi2>Здравствуйте Corvin, Вы писали:


C>>Не, по-моему, ты неправ, неразрешенная значит, что есть несколько вариантов и неясно, какой выбрать


Vi2>Не несколько вариантов, а ни одного. Разницу чувствуешь?

Нет, ты определенно неправ, — попробуй у себя сделать 2 объявления функция с одинаковым именем, но с разным интерфейсом в 2-х различных хедерах и посмоти, что тебе выкинет компилятор.
А потом попробуй вызвать функцию, которой нет и тоже посмотри, что тебе выдаст компилятор
Re[3]: Нет такой функции при сборке
От: comer США http://getboost.codeplex.com/
Дата: 26.09.02 12:44
Оценка:
Здравствуйте Corvin, Вы писали:

Vi2>>Почему дважды, если Linker Tools Error LNK2001 — unresolved external symbol "symbol"? Неразрешённая, т.е. нет такой функции при сборке.


C>Не, по-моему, ты неправ, неразрешенная значит, что есть несколько вариантов и неясно, какой выбрать


Vi2 прав. Я просто не обратил внимания на ошибку. См. пояснения к ней в MSDN:

Code will generate this error message if it references something (like a function, variable, or label) that the linker can’t find in all the libraries and object files it searches. In general, there are two reasons this error occurs: what the code asks for doesn’t exist (the symbol is spelled incorrectly or uses the wrong case, for example), or the code asks for the wrong thing (you are using mixed versions of the libraries?some from one version of the product, others from another version).

Тут либо файл не подключен к проекту "threads.cpp", либо интерфейсы функций разный в h и cpp файлах. Почему они могут отличаться в MSDN написано см. LNK2001.
getboost.codeplex.com
citylizard.codeplex.com
Re[4]: Нет такой функции при сборке
От: Corvin Украина  
Дата: 26.09.02 12:49
Оценка:
Здравствуйте comer, Вы писали:

C>Здравствуйте Corvin, Вы писали:


Vi2>>>Почему дважды, если Linker Tools Error LNK2001 — unresolved external symbol "symbol"? Неразрешённая, т.е. нет такой функции при сборке.


C>>Не, по-моему, ты неправ, неразрешенная значит, что есть несколько вариантов и неясно, какой выбрать


C>Vi2 прав. Я просто не обратил внимания на ошибку. См. пояснения к ней в MSDN:


C>Code will generate this error message if it references something (like a function, variable, or label) that the linker can’t find in all the libraries and object files it searches. In general, there are two reasons this error occurs: what the code asks for doesn’t exist (the symbol is spelled incorrectly or uses the wrong case, for example), or the code asks for the wrong thing (you are using mixed versions of the libraries?some from one version of the product, others from another version).


C>Тут либо файл не подключен к проекту "threads.cpp", либо интерфейсы функций разный в h и cpp файлах. Почему они могут отличаться в MSDN написано см. LNK2001.


C>

Ну ладно-ладно, может, мы оба правы, просто что странно, так это то, что и файл подключен и интерфейсы одинаковые.
Re[5]: Нет такой функции при сборке
От: comer США http://getboost.codeplex.com/
Дата: 26.09.02 12:54
Оценка:
C>Ну ладно-ладно, может, мы оба правы, просто что странно, так это то, что и файл подключен и интерфейсы одинаковые.

Ну что ж. Выделяй минимальный.
getboost.codeplex.com
citylizard.codeplex.com
Re[5]: Нет такой функции при сборке
От: Vi2 Удмуртия http://www.adem.ru
Дата: 26.09.02 12:58
Оценка:
Здравствуйте Corvin, Вы писали:

C>Нет, ты определенно неправ, — попробуй у себя сделать 2 объявления функция с одинаковым именем, но с разным интерфейсом в 2-х различных хедерах и посмоти, что тебе выкинет компилятор.

C>А потом попробуй вызвать функцию, которой нет и тоже посмотри, что тебе выдаст компилятор

C>>РrinterMonitor.obj : error LNK2001: unresolved external symbol "int __cdecl DestroyThreadSyncResources(void)" (?DestroyThreadSyncResources@@YAHXZ).


Этим и утверждается, что ни в одном файле, который ты дал для сборки нет функции "int __cdecl DestroyThreadSyncResources(void)", чтобы ты мне не порекомендовал поииследовать.

Тем более, что функция описана как BOOL CreateThreadSyncResources(void).

Ищи, почему BOOL — не int.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[3]: Help, - LNK2001 error
От: Mink Россия  
Дата: 27.09.02 07:37
Оценка:
Здравствуйте Corvin, Вы писали:

C>Здравствуйте comer, Вы писали:


C>>Здравствуйте Corvin, Вы писали:


C>>>Есть хедер и реализация функций в срр.


C>>Пакеж.

C>Да, пожалуйста, ничего особенного:

C>threads.h

C>
C>.......
C>/* thread management */
C>BOOL    CreateThreadSyncResources(void);
C>BOOL    DestroyThreadSyncResources(void);
C>.....
C>


C>threads.cpp

C>
C>BOOL CreateThreadSyncResources(void)
C>{
C>............
C>}
C>BOOL DestroyThreadSyncResources(void)
C>{
C>.............
C>}

C>

C>Никаких специфических precompiler definitions нет...

Глупый вопрос: а ты делаешь
#include threads.h


в threads.cpp?
Сила, она в ньютонах
Re[4]: Help, - LNK2001 error
От: Corvin Украина  
Дата: 27.09.02 13:30
Оценка:
Здравствуйте Mink, Вы писали:


M>Глупый вопрос: а ты делаешь

M>
M>#include threads.h
M>


M>в threads.cpp?

Гы-Гы... Уже не смешно... Мы тут пришли к выводу, что это глюки компилятора и решили проблему тупым переименованием требуемых функций...
Re[5]: Help, - LNK2001 error
От: comer США http://getboost.codeplex.com/
Дата: 27.09.02 14:07
Оценка:
Здравствуйте Corvin, Вы писали:

C>Гы-Гы... Уже не смешно... Мы тут пришли к выводу, что это глюки компилятора и решили проблему тупым переименованием требуемых функций...


СТОП! Каким таким переименованием? Не видел, пожалуйста на арену!
getboost.codeplex.com
citylizard.codeplex.com
Re[5]: Help, - LNK2001 error
От: Анатолий СССР  
Дата: 27.09.02 14:13
Оценка:
Присоединюсь к comer-y. Уж очень было бы интересно узнать в чем тут провинился компилятор (хотя ошибку линковщик выдал).
Re[6]: Help, - LNK2001 error
От: Corvin Украина  
Дата: 27.09.02 14:15
Оценка:
Здравствуйте comer, Вы писали:

C>Здравствуйте Corvin, Вы писали:


C>>Гы-Гы... Уже не смешно... Мы тут пришли к выводу, что это глюки компилятора и решили проблему тупым переименованием требуемых функций...


C>СТОП! Каким таким переименованием? Не видел, пожалуйста на арену!

Просто дело обстоит так: мне нужно написать прогу для мониторинга работы принтера. В МСДНэе я нашел прогу-пример работы с принтером, которая как раз и отслеживала все, что только можно и собирала всю информацию о работе принтера. Написана она классно, со всеми возможными выделениями-перераспределениями памяти, так что я решил просто взять из нее все необходимые мне ф-ции и перелопатить подж себя. Для чего и переписал оные хедеры с реализациями в свой прожект. Проблема с unresolved ambiguity решилась когда я вместо, скажем,

threads.h
.......
/* thread management */
BOOL    CreateThreadSyncResources(void);
BOOL    DestroyThreadSyncResources(void);
.....


threads.cpp 
BOOL CreateThreadSyncResources(void)
{
............
}
BOOL DestroyThreadSyncResources(void)
{
.............
}


сделал

threads.h
.......
/* thread management */
BOOL    CreateThreadSyncResources1(void);
BOOL    DestroyThreadSyncResources1(void);
.....


threads.cpp 
BOOL CreateThreadSyncResources1(void)
{
............
}
BOOL DestroyThreadSyncResources1(void)
{
.............
}

Просто интересно стало, что ж это еще такое можно было настроить в VС++...
Re[7]: Help, - LNK2001 error
От: comer США http://getboost.codeplex.com/
Дата: 27.09.02 14:24
Оценка:
Здравствуйте Corvin, Вы писали:

C>>>Гы-Гы... Уже не смешно... Мы тут пришли к выводу, что это глюки компилятора и решили проблему тупым переименованием требуемых функций...

...
C>Написана она классно, со всеми возможными выделениями-перераспределениями памяти, так что я решил просто взять из нее все необходимые мне ф-ции и перелопатить подж себя. Для чего и переписал оные хедеры с реализациями в свой прожект.
...
C>Просто интересно стало, что ж это еще такое можно было настроить в VС++...

Тут, вероятно, в какой то одной из подключенных к твоему проекту библиотеке уже есть такие функции, покрайней мере с такими именами, но к глюку комплайлера или линкера отношусь скептически (хотя и видел их много но не верю пока не будет очевидно).

Но хоть радует то что все разрешилось! Успехов!
getboost.codeplex.com
citylizard.codeplex.com
Re[8]: Help, - LNK2001 error
От: Corvin Украина  
Дата: 27.09.02 14:27
Оценка:
Здравствуйте comer, Вы писали:

C>Тут, вероятно, в какой то одной из подключенных к твоему проекту библиотеке уже есть такие функции, покрайней мере с такими именами, но к глюку комплайлера или линкера отношусь скептически (хотя и видел их много но не верю пока не будет очевидно).


Я тоже отношусь скептически, поетому ж, собствено и пишу, но проект же ж мой, НЕТУ там больше функций с такими именами, НЕТУ!!! Сам чуть не лопнул, это быдо то, чем я первый час занимался.
Re[9]: Забить или не забить?
От: comer США http://getboost.codeplex.com/
Дата: 27.09.02 14:43
Оценка:
Здравствуйте Corvin, Вы писали:

C>Я тоже отношусь скептически, поетому ж, собствено и пишу, но проект же ж мой, НЕТУ там больше функций с такими именами, НЕТУ!!! Сам чуть не лопнул, это быдо то, чем я первый час занимался.


Если проект не большой, или не лень выделить мини проект который глючит, можешь дать посмотреть вместе с .dsp? Если уже не интересно, то можно и забыть .
getboost.codeplex.com
citylizard.codeplex.com
Re[7]: Почему LNK2001 error
От: Vi2 Удмуртия http://www.adem.ru
Дата: 27.09.02 15:25
Оценка:
Здравствуйте Corvin, Вы писали:

Когда ты заменил в threads.h и threads.cpp

C>BOOL CreateThreadSyncResources(void);

C>BOOL DestroyThreadSyncResources(void);

на

C>BOOL CreateThreadSyncResources1(void);

C>BOOL DestroyThreadSyncResources1(void);

где-то остались вызовы, в частности, в РrinterMonitor.obj или РrinterMonitor.cpp, функции DestroyThreadSyncResources. Которой уже нет в проекте. Вот тебе и LINK2001.

Уж почему она вызывает эту функцию и почему компилятор пропускает такой вызов без прототипа, нужно смотреть в тело РrinterMonitor.cpp.

Поищи поиском по всем своим файлам строчки "ThreadSyncResources" через "Поиск в файлах...", указав *.h, *.c и *.cpp.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[4]: Help, - LNK2001 error
От: Vitaly Titov  
Дата: 27.09.02 23:24
Оценка:
M>Глупый вопрос: а ты делаешь
M>
M>#include threads.h
M>


M>в threads.cpp?



Еще более глупый вопрос, а вы делаете rebuild all периодически?

а то, ходят слухи, линкер сбоит при использовании precompiled headers...

Re[7]: Help, - LNK2001 error
От: small_cat Россия  
Дата: 30.09.02 02:47
Оценка:
Здравствуйте Corvin, Вы писали:

C>Просто дело обстоит так: мне нужно написать прогу для мониторинга работы принтера. В МСДНэе я нашел прогу-пример работы с принтером, которая как раз и отслеживала все, что только можно и собирала всю информацию о работе принтера. ...


Слушай, а можешь сказать, где она в MSDN есть? А то мне предолжили нечто подобное сделать, только я не приступал еще
- Простите, профессор, не пса, а когда он уже был человеком.
— То-есть он говорил? Это еще не значит быть человеком. (с) Булгаков
Re[8]: Help, - LNK2001 error
От: Corvin Украина  
Дата: 30.09.02 12:36
Оценка:
Здравствуйте small_cat, Вы писали:

SC>Здравствуйте Corvin, Вы писали:


C>>Просто дело обстоит так: мне нужно написать прогу для мониторинга работы принтера. В МСДНэе я нашел прогу-пример работы с принтером, которая как раз и отслеживала все, что только можно и собирала всю информацию о работе принтера. ...


SC>Слушай, а можешь сказать, где она в MSDN есть? А то мне предолжили нечто подобное сделать, только я не приступал еще

Не помню... Я долго долго ковырялся в районе функции FindFirstPrinterChangeNotification и че-то нарыл... А может и не в МСДН"е... В общем, если хош, могу прислать
Re[9]: Help, - LNK2001 error
От: small_cat Россия  
Дата: 30.09.02 20:24
Оценка:
C>В общем, если хош, могу прислать

Если не затруднит — буду премного благодарен
- Простите, профессор, не пса, а когда он уже был человеком.
— То-есть он говорил? Это еще не значит быть человеком. (с) Булгаков
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.