Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
11 / 11 / 2
Регистрация: 18.07.2009
Сообщений: 123

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

15.06.2010, 01:53. Показов 3286. Ответов 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
Ответ Создать тему
Новые блоги и статьи
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru