Форум программистов, компьютерный форум CyberForum.ru

Глобальный член класса - C++

Восстановить пароль Регистрация
 
Seroga7
 Аватар для Seroga7
6 / 6 / 1
Регистрация: 08.12.2012
Сообщений: 147
22.04.2013, 21:13     Глобальный член класса #1
Пишу программу, в которой много классов, и каждый лежит в своем файле. Все работает. Но как только после определения класса я объявляю член этого класса, компилятор говорит, что этот объект определен в каждом файле, к которому я подключал исходный, с описанием класса. При чем я использую дерективы #ifndef для избежания повторного включения. Где мне правильно объявить член этого класса, что-бы его видели все (куда подключен файл с ним) файлы
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2013, 21:13     Глобальный член класса
Посмотрите здесь:

C++ Член-функция класса не работает
C++ Член-ссылка на другой член класса
C++ Функция-член шаблонного класса
C++ Не функция-член класса
Static член класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.04.2013, 21:17     Глобальный член класса #2
Цитата Сообщение от Seroga7 Посмотреть сообщение
Глобальный член класса
если речь о статической переменной, то её надо прописать в срр-файле
Seroga7
 Аватар для Seroga7
6 / 6 / 1
Регистрация: 08.12.2012
Сообщений: 147
22.04.2013, 21:21  [ТС]     Глобальный член класса #3
Переменная не static, обыкновенная. Пробовал прописать в срр, но ее не видно нигде вообще.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,061
22.04.2013, 21:29     Глобальный член класса #4
Цитата Сообщение от Seroga7 Посмотреть сообщение
Но как только после определения класса я объявляю член этого класса,
Это как???
члены описываются при определении
как можно после?
или ты имеешь ввиду объект?
так глобальный объект (или тип) объявляется один раз

а чтобы видели другие надо добавлять слово extern
лучше это сделать в заголовочном файле

например так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// MyClass.h
class MyClass
{
public:
 MyClass();
int a;
};
extern MyClass myCl;
 
MyClass.c
#include "MyClass.h"
 MyClass::MyClass()
{
  a=5;
}
 
MyClass myCl;
и все модули к которым подключишь MyClass.h
будут видеть myCl
Seroga7
 Аватар для Seroga7
6 / 6 / 1
Регистрация: 08.12.2012
Сообщений: 147
22.04.2013, 21:41  [ТС]     Глобальный член класса #5
Цитата Сообщение от ValeryS Посмотреть сообщение
или ты имеешь ввиду объект?
Да, я имел в виду объект

При использовании идентификатора extern появилась ошибка "неразрешенный внешний символ"

Его еще и в срр нужно добавить, вот в чем дело. Не заметил. Теперь вроде работает. Спасибо!
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
22.04.2013, 21:43     Глобальный член класса #6
Учи матчасть, extern - объявление, а не определение. К нему требуется cpp файл, в котором будет произведено объявление.
Seroga7
 Аватар для Seroga7
6 / 6 / 1
Регистрация: 08.12.2012
Сообщений: 147
22.04.2013, 21:48  [ТС]     Глобальный член класса #7
Прошу прощение за терминологические ошибки, наверстаю упущенное)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2013, 21:52     Глобальный член класса
Еще ссылки по теме:

C++ Массив как член класса
C++ Член класса управляемый не может относиться к типу класса не управляемый
C++ Указатель на член структуры/класса

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,061
22.04.2013, 21:52     Глобальный член класса #8
Цитата Сообщение от Seroga7 Посмотреть сообщение
При использовании идентификатора extern появилась ошибка "неразрешенный внешний символ"
правильно появилась
extern говорит компилятору "не дергайся где то она объявлена, пускай у линкера голова болит"
а вот когда линкер не находит определения
он и говорит " тут все ссылаются на какую то переменную, а я не знаю где её взять"
Yandex
Объявления
22.04.2013, 21:52     Глобальный член класса
Ответ Создать тему
Опции темы

Текущее время: 02:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru