11 / 11 / 2
Регистрация: 18.07.2009
Сообщений: 123

LNK2001 в статической функции

15.06.2010, 01:53. Показов 3291. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
в некотором приложении пришлось работать с сокетами, решил сделать враперы, все вроде ничего, но вот только взяло и вылезло:

Error 1 error LNK2001: unresolved external symbol "private: static class Sending::CCLient * Sending::CCLient::instance" (?instance@CCLient@Sending@@0PAV12@A) Client.obj

вот код и тп :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    typedef class CCLient : public IClient
    {
        unsigned short nPort;
        SOCKET ClientSocket;
        char * szServerIP;
        static CCLient * instance;
 
    public:
 
        virtual bool Connect();
        virtual void Close();
        virtual void Receive();
 
        static CCLient * Instance(int Port, char * ServerIP);
        ~CCLient();
 
    private:
 
        CCLient(int Port, char * ServerIP);
 
    } *PCCLient;
та самая функция:
C++
1
2
3
4
5
6
7
    CCLient * CCLient::Instance(int Port, char * ServerIP)
    {
        if (instance == NULL) {
            instance = new CCLient(Port, ServerIP);
        } 
        return instance;
    }
помогите кто чем может )
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.06.2010, 01:53
Ответы с готовыми решениями:

LNK2001 шаблон функции
Здравствуйте! Ошибка линковщика: 1>map.obj : error LNK2001: unresolved external symbol "class sf::Vector2<float> __cdecl...

"С" стиль именование статической функции
Реально ли создать dll c++ со статической функцией класса и именованием в стиле "С". extern "C" { namespace...

LNK2001 KeyBoardProc
Ошибка 1 error LNK2001: неразрешенный внешний символ ""long __stdcall KeyboardProc(int,unsigned int,long)"...

25
229 / 67 / 11
Регистрация: 02.06.2009
Сообщений: 280
19.06.2010, 14:07
Студворк — интернет-сервис помощи студентам
Потому что думал на ф-цию, и думал ну как же так - вот она же определена, какого черта здесь ошибка нот резолвед?
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
19.06.2010, 14:27
Цитата Сообщение от Alexandoros Посмотреть сообщение
Не будут, так как всегда есть вероятность написания CSingle x(CSingle::GetInstance()); И подобных.
Скажи, пожалуйста, при передаче объекта по указателю на константу ты проверяешь, что вызываемая функция не изменила состояние объекта? Готов спорить, что нет. Как же так, ведь есть вероятность, что вызываемая функция с помощью const_cast "сняла" константность и изменила объект?
Здесь в дело вступает понятие контракта, если функция принимает объект по константному указателю/ссылке она обязуется не менять его состояние.
Так же и с одиночкой, есть контракт - получение экземпляра должно осуществляться через метод Instance/GetInstance и любой мало-мальски соображающий программист, увидя данный метод, поймет, что к чему, и не важно страдает он склерозом или нет.
И если программист будет соблюдать данный контракт, то и условия паттерна будут соблюдены, несмотря на незащищенность конструкторов.
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
20.06.2010, 22:45
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Здесь в дело вступает понятие контракта, если функция принимает объект по константному указателю/ссылке она обязуется не менять его состояние.
C++
1
int f( const int & n );
Обязательство состоит не в том, чтобы "не изменять параметр ", а в том, чтобы "не использовать параметр как l-выражение; например, не изменять параметр непосредственным присваиванием" ( n = 111; n++ )

Цитата Сообщение от CyBOSSeR Посмотреть сообщение
любой мало-мальски соображающий программист, увидя данный метод, поймет, что к чему, и не важно страдает он склерозом или нет.
И если программист будет соблюдать данный контракт, ...
Если так рассуждать...

Компилятор выдаёт сообщение об ошибке. И зачем это разработчики компилятора добавили проверку, не меняет ли функция константный объект? Ведь есть контракт и любой мало-мальски знающий программист ...
C++
1
2
3
4
5
int f( const int & n )
{
    n++;// error C3892: 'n' : you cannot assign to a variable that is const 
    return 0;
}
Или, например, модификаторы доступа public, private, protected. Зачем усложнять язык?
Программист, не страдающий склерозом, знает условия контракта - к каким полям и методам
класса можно обращаться, а к каким нет.
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
21.06.2010, 10:13
Цитата Сообщение от Alex5 Посмотреть сообщение
Обязательство состоит не в том, чтобы "не изменять параметр ", а в том, чтобы "не использовать параметр как l-выражение; например, не изменять параметр непосредственным присваиванием" ( n = 111; n++ )
const используется для указания о неизменности состояния объекта.
Цитата Сообщение от Alex5 Посмотреть сообщение
Компилятор выдаёт сообщение об ошибке. И зачем это разработчики компилятора добавили проверку, не меняет ли функция константный объект?
При чем здесь компилятор? Правила обработки const диктует стандарт, а не компилятор.
Цитата Сообщение от Alex5 Посмотреть сообщение
Ведь есть контракт и любой мало-мальски знающий программист ...
... сможет "снять" константность, несмотря на "проверки компилятора", поэтому const не является абсолютной защитой. const в первую очередь определяет контракт.
Цитата Сообщение от Alex5 Посмотреть сообщение
Программист, не страдающий склерозом, знает условия контракта - к каким полям и методам
класса можно обращаться, а к каким нет.
Модификаторы доступа не определяют какого либо контракта. Программист, знаюший как выглядит описание класса одиночки, знает, как обращатся к его единственному экземпляру, не смотря на то, защищены ли конструкторы или нет.
0
229 / 67 / 11
Регистрация: 02.06.2009
Сообщений: 280
21.06.2010, 19:27
CyBOSSeR, я спрошу еще раз. С твоей точки зрения выходит что

.cpp
...
CSomeObject GlobalObject; // please do not copy this object

синглтон. Так что ли?

Как же так, ведь есть вероятность, что вызываемая функция с помощью const_cast "сняла" константность и изменила объект?
Это из "фак"а по с++
Q: почему ввели const_cast, ведь он нарушает безопасность в с++?
A: когда программист юзает const_cast он сознательно, на свой страх и риск, делает подобное. Модификатор const в объявлении обджекта нужен для контроля за нечаянным нежелательным изменением обджекта.

Еще раз повторю. Синглтон нужен для того что б программист не запоминал всякие "правила" и "контракты" по работе с обджектом, а не смог случайно сделать что-то с ним. В случае использования хака программист сам отдает отчет в своим действиям. Поэтому без полного перекрытия возможности по легальному копированию обджект не может быть синглтоном.
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
21.06.2010, 22:43
Цитата Сообщение от Alexandoros Посмотреть сообщение
Так что ли?
Нет. В одиночке должен присутствовать метод для получения единственного экземпляра.
Цитата Сообщение от Alexandoros Посмотреть сообщение
Еще раз повторю. Синглтон нужен для того что б программист не запоминал всякие "правила" и "контракты" по работе с обджектом, а не смог случайно сделать что-то с ним.
Одиночка служит для обеспечения единственности экземпляра, глобальной точки доступа к нему и отложенной инициализации. Больше не для чего.
Что тебе мешает сделать:
C++
1
delete Singleton::Instance();
?
Я не говорю, о том что не надо защищать конструкторы. Это желательно, крайне желательно. Но утверждать, что класс не может быть одиночкой, если этого не сделано, по-моему, неверно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.06.2010, 22:43

Ошибки LNK2001 и LNK1120
Наверное, какая-то нубская ошибка в синтаксисе, но я не знаю, что с этим делать //файл complex.h #ifndef _COMPLEX_ #define _COMPLEX_ ...

Неубиваемые LNK2019 и LNK2001
Я ужо задолбался с этой дохрена-непонятной ошибкой которая обозначает великое НИЧТО! LNK2019 = LNK2001 = смысл(NULL) Она не указывает...

LNK2001 при использовании liblzma
#include <iostream> #include <Windows.h> #include <fstream> #include "lzma.h" using namespace std; std::string...

adodb.obj : error LNK2001:__imp__executor_globals_id
Доброе время суток, знатоки. Сразу скажу, что я программист по PHP и Си для темный лес. Проблема в следующем, имеется .dll для...

error LNK2001: unresolved external symbol_mainCRTStartup
Помогите пожалуста разобраться. Написал самую что ни на есть простейшую программу, и в ней нашлись ошибки. Ошибки две: 1. error...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Опции темы

Новые блоги и статьи
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru