Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для koker007
59 / 52 / 11
Регистрация: 04.08.2015
Сообщений: 731

Идентификатор не распознается компилятором

29.01.2017, 12:40. Показов 1025. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем есть экземпляр указателя класса который называется Game_menu и расположен в файле class.h. Я этот файл подключил в другом файле Sokets.h через:
C++
1
2
#pragma once
#include "Class.h"
Однако при написании экземпляра компилятор выдает ошибку "C2065 необъявленный идентификатор". Этот экземпляр еще вызывается в другом файле main.cpp, дак вот тут ошибки нету, а подключается файл ровно также.

Еще странно что если начать набирать Game_menu в файле Sokets.h то он высвечивается в списке, значит он в зоне видимости, почему тогда ошибка?

Если надо больше информации, скажите какой, я напишу.

Добавлено через 16 минут
Можно ли как-то сказать компилятору что этот экземпляр потом встретится?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.01.2017, 12:40
Ответы с готовыми решениями:

Assume не распознается компилятором FASM
Фрагмент кода из MASM. assume cs:code,ds:data start: mov ax,data mov ds,ax Подскажите, как переделать на FASM?...

Дан адрес и маска подсети. Определить идентификатор сети и идентификатор узла
Дан IP-адрес и маска подсети. Определить идентификатор сети и идентификатор узла. IP-адрес 129.102.197.23 маска 255.255.0.0

Ошибка Метаданных "не найден идентификатор в справочнике Идентификатор объекта метаданных"
В общем ситуация следующая, только начал разбираться с 1С, скачал с оф сайта учебную версию для программиста. Мне дали задание на...

7
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
29.01.2017, 12:51
А можно код посмотреть?
0
 Аватар для koker007
59 / 52 / 11
Регистрация: 04.08.2015
Сообщений: 731
29.01.2017, 14:17  [ТС]
main.cpp
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
32
33
34
35
36
37
38
39
40
41
//Подключение стандартных библиотек
#include <iostream>
#include <locale>
 
#include <fstream>
 
#include <stdlib.h>
#include <stdio.h>
 
#include <string> //стандартная библитека работы со строками
#include <iostream> //Библиотека ввода-вывода
#include <fstream> //Файловый ввод-вывод
 
using namespace std;
//Подключение OpenGL
#include <GL/glew.h>
#include <GLFW/glfw3.h>
 
//Подключение SFML NET
#include <SFML/Network.hpp>
// Включаем GLM
#include <glm/glm.hpp>
using glm::mat4;
using glm::vec3;
 
#include <glm/gtc/matrix_transform.hpp>
 
#include "Data.h"
#include "Shader_programs.h"
#include "Draw_primitive.h"
//#include "PlayerCamera.h"
#include "Models.h"  //Файл хранящий модели, и их текушие вершины
#include "Compute.h" //Файл с вычислениями
#include "Texture.h"
#include "Class.h" //Файл с классами
#include "Sockets.h" //Описание сокетов
#include "Time.h" //Описание времени
 
........
    Game_menu = new Menu;
........
Class.h
C++
1
2
3
4
5
6
7
8
#pragma once
#include "Time.h"
#include "Sockets.h"
 
......
class Menu{.....};
Menu *Game_menu = 0;
......
Sockets.h
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#pragma once
 
#include "Class.h" //Файл с классами
 
......
 
//1 тип передаваемого сокета
class TDSocket_1_player {
private:
    .........................
    ........................
    ......................
 
public:
    .............................
    ...........................
    ..........................
 
    void unzip(){
        if(Setup_game_server != 0){
            //если пакет получает сервер
            if (Setup_game_server->Get_server_y_n() == 'y'){
                //то значит подключается новый игрок и надо ему отправить информацию о всех подключенных игроках и остальным об этом игроке
                
                //говорим что на сервере новый игрок расчитывая его место на сервере
 
                //делаем запрос о формировании пакетов и отправляем их в очередь
 
 
            }
 
            //если клиент
            if (Setup_game_server->Get_server_y_n() == 'n'){
                //если это первый пакет от сервера
                if (Setup_game_server->get_first_packet() == 0){
                    Setup_game_server->set_first_packet(1);
 
                    //////Ранее тут было обращение к Game_menu на которое компилятор ругался
                    //////Но я переделал, так чтобы ссылалась на объект определенный раньше всех.
                    //////программа работает, но если есть какой-то способ открыть видимость, то я бы хотел знать
                }
                
                //каждое сообщение просто заносится в базу
                Setup_game_server->Set_Name(id_player, name);
                Setup_game_server->Set_Color(id_player, color);
                Setup_game_server->Set_Password(id_player, serv_adm_pas);
                Setup_game_server->Set_ID_image(id_player, id_image);
 
            }
        }
    }
};
......
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
29.01.2017, 14:25
В заголовочном файле нельзя просто так объявить переменную. Сама переменная должна находиться в файле реализации (.cpp), а в заголовочном файле переменная должна быть помечена как имеющая внешнее связывание - с помощью ключевого слова extern.
C++
1
2
3
4
5
// файл class.h
extern Menu *Game_menu;
 
// файл class.cpp
Menu *Game_menu = 0;
Теперь к ней можно обращаться из любого файла, в котором подключен class.h.
1
 Аватар для koker007
59 / 52 / 11
Регистрация: 04.08.2015
Сообщений: 731
31.01.2017, 03:38  [ТС]
Цитата Сообщение от likehood Посмотреть сообщение
должна находиться в файле реализации
Спасибо, но я наверное вернусь к этому вопросу позже, пока что я совсем не понимаю зачем разделять cpp и заголовочный файл, и какие будут последствия если этого не делать. Я прекрасно понимаю раз все говорят что так надо то должна быть на то причина, но пока что я с ней так не столкнулся да и программа работает так как я её и задумывал. По этому необходимости в разделении .h и .cpp увы, пока что не вижу.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,174
31.01.2017, 05:33
Цитата Сообщение от koker007 Посмотреть сообщение
Sockets.h
У вас Class.h включает Sockets.h, а Sockets.h включает Class.h. Этот "бесконечный цикл включений" был разорван #pragma once так, что Sockets.h включился в main.cpp первым, а Class.h - вторым. В результате содержимому Sockets.h содержимое Class.h не видно (оно идет ниже). При любой попытке ссылаться из Sockets.h на идентификаторы из Class.h будет та самая ошибка "C2065 необъявленный идентификатор".

Если у вас в коде наблюдается зацикленное включение заголовочных файлов - то сразу "ффтопку". Никакого зацикленного включения заголовочных файлов быть не должно.
1
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
31.01.2017, 10:10
Привет форвард декларейшн
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
31.01.2017, 14:43
Цитата Сообщение от koker007 Посмотреть сообщение
о должна быть на то причина, но пока что я с ней так не столкнулся
уже столкнулись.
сейчас у вас начнется дикая путаница с включениями заголовков.

Цитата Сообщение от koker007 Посмотреть сообщение
да и программа работает так как я её и задумывал
если бы она работала, этой темы сейчас бы не существовало.
и если не начнете по уму разделять код на cpp/h,
то дальше этот бардак будет всё больше и больше усугубляться,
скатывая ваш говнокод в терминальную стадию.

Цитата Сообщение от koker007 Посмотреть сообщение
По этому необходимости в разделении .h и .cpp увы, пока что не вижу.
страдайте дальше.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.01.2017, 14:43
Помогаю со студенческими работами здесь

Флешка не распознается
Нужна помощь у меня флешка SanDisk 128 гига 3.0 USB не определяется ни одним компом нет никаких признаков жизни даже драйвера что подключен...

Не распознается картридж
Доброго времени суток. Столкнулся с такой проблемой и не знаю, как ее решить. Принтер Canon MG3140. Картридж черный печатал отлично, все...

Не распознается флешка
Здравствуйте, я сделал загрузочную флешку,но после установки windows флешка перестала распозноваться. проверял через diskmgmt.msc и на...

Не распознается getElementById
Почему этот код работает нормально? &lt;script&gt; var numberOfFaces = 5; function generateFaces() { ...

SSD не распознается
Всем привет. Значит купил я недавно на ebay ssd. Фото прикрепляю к письму. В общем я ранее не имел опыта с такими ssd, поэтому прошу...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru