Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 5

Не линкуются статические данные класса

14.12.2010, 21:26. Показов 1575. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите, пожалуйста, разобраться. Компилирую под ВижуалСтудией2008:
Выдаёт ошибку, что не может слинковать статический член класса:

server.obj : error LNK2005: "public: static void __cdecl Server::destroyMainThread(void)" (?destroyMainThread@Server@@SAXXZ) already defined in bks.obj
1>bks.obj : error LNK2001: unresolved external symbol "public: static void * * Server::hEvents" (?hEvents@Server@@2PAPAXA)
1>server.obj : error LNK2019: unresolved external symbol "public: static void * * Server::hEvents" (?hEvents@Server@@2PAPAXA) referenced in function "public: static void __cdecl Server::mainThread(void *)" (?mainThread@Server@@SAXPAX@Z)
1>D:\Documents\Learning\C++\Visual Studio 2008\Projects\bks\Debug\bks.exe : fatal error LNK1120: 1 unresolved externals

сам код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Server
{
static TDATAQueue qThreads;
// First is happen when need to destroy thread
// Second is happen when adding to queue  
 
public:
static HANDLE hEvents[2];
static HANDLE hServerThread;
static int init()
{
    // Create two event objects
    for (int i = 0; i < 2; i++) 
     {  
         Server::hEvents[i] = CreateEvent( 
            NULL,   // default security attributes
            FALSE,  // auto-reset event object
            FALSE,  // initial state is nonsignaled
            NULL);  // unnamed object
 
        if (hEvents[i] == NULL) 
         { 
            printf("CreateEvent error: %d\n", GetLastError() ); 
            ExitProcess(0); 
         } 
     }
    
    // CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Server::mainThread,NULL,0,NULL);
return 0;   
}
.... и т.д.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.12.2010, 21:26
Ответы с готовыми решениями:

Статические данные класса
Здравствуйте. Подскажите, почему при создании класса Date не происходит бесконечного вызова конструкторов? class Date { ...

Статические члены класса
Так и не понял (хелп на своей установке Pascal ABC не работает), поддерживает ли PascalABC v.3.01 статические члены класса или нет?) ...

Статические члены класса
Добрый день. Проходили тему - статические члены класса. Написали программу, вылезает ошибка, помогите побороть пожалуйста. #include...

7
38 / 38 / 5
Регистрация: 03.06.2010
Сообщений: 120
15.12.2010, 06:49
Странно. У меня никаких ошибок не возникло. Может скинешь проект полностью?

Но вообще возможно нужно использовать директиву #pragma once, ну или аналогичное #ifndef SERVER_H_ #define SERVER_H_ #endif и оборачивать твой класс.

И еще лучше разделить на хедер файл и спп.
1
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 5
15.12.2010, 11:52  [ТС]
Уже пробовал и в разных файлах... Не дало результат - не линкуется и всё тут. Просто проект небольшой в принципе, поэтому и делаю одним файлом. Я прикрепил проект. Может в настройках проекта что-то не так...
Вложения
Тип файла: zip bks.zip (20.7 Кб, 9 просмотров)
0
 Аватар для deadlock
378 / 358 / 23
Регистрация: 14.12.2010
Сообщений: 1,265
15.12.2010, 11:59
думаю надо в глобальной области видимости инициализировать статические объекты:
C++
1
2
3
HANDLE Server::hServerThread=// чему-то
HANDLE Server::hEvents[0]=// чему-то
HANDLE Server::hEvents[1]=// чему-то
1
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 5
15.12.2010, 12:49  [ТС]
Спасибо deadlock, lezh1k за помощь!!!
Инициализиция помогла!!!
Никогда особо не работал со статическими объявлениями. Чего-то раньше думал, что инициализации не нужно, что компилятор просто выделит память в глобальной области, а что там будет содержатся - уже всё равно. Ещё раз спасибо!!!
0
38 / 38 / 5
Регистрация: 03.06.2010
Сообщений: 120
15.12.2010, 13:01
можно не инициализировать. Просто перед

int _tmain(int argc, _TCHAR* argv[]) поставь объявление :
HANDLE Server::hEvents[2];

... т.е. у тебя будет так :

C++
1
2
3
HANDLE Server::hEvents[2];
 
int _tmain(int argc, _TCHAR* argv[]) /*дальше код*/

Ну вот блин . Ты уже все сделал :-D

И все равно я думаю, было бы удобнее раскидать по разным файлам. И потом в Cpp файле просто сделать такое объявление.
0
 Аватар для deadlock
378 / 358 / 23
Регистрация: 14.12.2010
Сообщений: 1,265
15.12.2010, 14:18
согласен, достаточно просто объявить, эт я перестраховался ))))
0
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 5
16.12.2010, 10:46  [ТС]
Да, я попробовал так сделать. Теперь хоть стал более прозрачный механизм работы со статическими параметрами. Спасибо за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.12.2010, 10:46
Помогаю со студенческими работами здесь

Статические поля класса
Не подскажете как инициализировать статический массив? Но чтобы я сам мог ввести этот массив.

Статические члены класса
Доброго времени суток. Задача состоит в том, чтобы создать список обыектов класса Test, с возможностью последующего добавления элементов...

Статические поля класса
class mi { int a,b; public: mi(int a, int b) : a(a),b(b) {} void sw() { std::cout&lt;&lt;a&lt;&lt;&quot; - &quot;&lt;&lt;b&lt;&lt;std::endl; } ...

Вбить в переменную данные за пределом класса и достать эти данные внутри класса
$bd =1; class cl { public function __construct() { print_r($bd); } } Как сделать так чтобы вбить в переменную...

Статические методы класса (static)
Доброго времени суток! Читаю &quot;Решение сложных задач С++ - Саттер&quot;, у него есть такая задача: вы хотите написать шаблон класса MyClass,...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru