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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Helldrg
-15 / 55 / 1
Регистрация: 10.01.2011
Сообщений: 1,100
#1

Как передать ссылку на объект в класс - C++

20.02.2013, 00:39. Просмотров 1923. Ответов 29
Метки нет (Все метки)

Здравствуйте! Подскажите, пожалуйста, почему не работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
log.h
class LogClass
{
public:
    bool InitializeLog();
    void Write(char*);
private:
    std::ofstream m_fout;
};
main.h
....
LogClass* Log;
Log = new LogClass;
Log.InitializeLog();
ClassA->Function(&Log);
....
 
ClassA.cpp
bool SystemClass::Function(LogClass* Log)
{
    Log->Write("Hello");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2013, 00:39     Как передать ссылку на объект в класс
Посмотрите здесь:
C++ Как в функции my_function преобразовать ссылку на базовый класс в ссылку на класс B или С
Недопустимый неполный тип , или как передать в функцию указатель на объект класса , или просто объект C++
C++ Как вернуть ссылку на объект?
C++ Как функции возвратить ссылку на объект?
Как передать ссылку на переменную по UDP? C++
C++ Как передать в функцию ссылку на структуру?
C++ Как передать в метод класса ссылку на экземпляр
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
20.02.2013, 20:38     Как передать ссылку на объект в класс #16
Цитата Сообщение от alsav22 Посмотреть сообщение
Это способ применять следует, но это не исключает множественности включений. Это работает для компилятора, который в каждую единицу времени видит одну единицу трансляции, поэтому и сработает, если двойные включения находятся в одном файле. Если же двойные включения в разных файлах, то этот способ уже не поможет, потому что для компилятора всё будет нормально. Увидит только компоновщик, который видит все файлы.
Ничего не понял, короче, можно пример, когда этот способ не сработает.
Вообще, инклуд-guardы хороши, но лучше всяких guardов поможет просто держать в голове, какие файлы есть в проекте. Какие заголовки куда подключаются. И по возможности самому контролировать это, не включая второй раз заголовок, который уже включён внутри одного из заголовков проекта.
Вообще, если есть возможность, то избегать вложенных инклудов внутри h-файлов,

Просто надо держать в голове все *.с файлы, которые их используют данный заголовок и в них обеспечивать подключение заголовков, от которых зависит данный в нужном порядке.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.02.2013, 20:57     Как передать ссылку на объект в класс #17
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Ничего не понял, короче, можно пример, когда этот способ не сработает.
.h файл, в нём определение (функции, переменной и т.п.). Присутствует инклуд-guard. Это файл подключен в нескольких файлах .cpp. Никаой инклуд-guard не спасёт от множественного определения.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
20.02.2013, 21:00     Как передать ссылку на объект в класс #18
так а нефиг в h-файлах определять переменные и функции. Никогда, даже если один раз инклудится он в проекте.
я о таком даже подумать не мог, когда отвечал на твоё сообщение.
Прототипы функций, объявления структур, классов и объединений, объявление extern переменных, макросы и дефайны - вот что должно быть в h-файле
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.02.2013, 21:18     Как передать ссылку на объект в класс #19
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
я о таком даже подумать не мог, когда отвечал на твоё сообщение.
Ты не мог, а другие спошь и рядом делают. Недавняя тема: поместил методы специализации класса, вместе с шаблонами, в .h файл и подключил его к нескольким .cpp. С шаблонами так и нужно, а специализация давала множественное определение. Надеются на инклуд-guard.

Добавлено через 5 минут
Специализация шаблона
Helldrg
-15 / 55 / 1
Регистрация: 10.01.2011
Сообщений: 1,100
22.02.2013, 16:04  [ТС]     Как передать ссылку на объект в класс #20
Вы имеете ввиду реализацию класса в .сpp делать а прототипы в .h?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
22.02.2013, 16:10     Как передать ссылку на объект в класс #21
ITcrusader,
C++
1
2
3
4
5
6
7
#pragma once
#ifndef HEADER_H
#define HEADER_H
 
// тут все содержимое заголовочного файла...
 
#endif
Ну уж либо одно, либо другое.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.02.2013, 16:46     Как передать ссылку на объект в класс #22
Цитата Сообщение от Helldrg Посмотреть сообщение
Вы имеете ввиду реализацию класса в .сpp делать а прототипы в .h?
Да. Кроме шаблонов.
Helldrg
-15 / 55 / 1
Регистрация: 10.01.2011
Сообщений: 1,100
22.02.2013, 19:08  [ТС]     Как передать ссылку на объект в класс #23
Ну это хорошо я всегда так пишу))
А если шаблоны писать в классе то потом ошибки не будет?(Это просто так еще раз уточнить)
И еще, помните я говорил, что хороший ли это способ создания логера(журнала) ошибок, так вот можете на него ответить?) Может быть в сpp есть функция или еще что то, которая выводит ошибки или сохраняет их. Или может класс лучше переписать, что бы был более как бы так сказать быстрее что ли или проще)
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.02.2013, 19:28     Как передать ссылку на объект в класс #24
Цитата Сообщение от Helldrg Посмотреть сообщение
А если шаблоны писать в классе то потом ошибки не будет?
Прототип шаблона и его реализация должны быть в одном файле(но не специализация).
Цитата Сообщение от Helldrg Посмотреть сообщение
И еще, помните я говорил, что хороший ли это способ создания логера(журнала) ошибок, так вот можете на него ответить?) Может быть в сpp есть функция или еще что то, которая выводит ошибки или сохраняет их. Или может класс лучше переписать, что бы был более как бы так сказать быстрее что ли или проще)
На этот вопрос у меня ответа нет.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.02.2013, 19:36     Как передать ссылку на объект в класс #25
Цитата Сообщение от Helldrg Посмотреть сообщение
Или может класс лучше переписать, что бы был более как бы так сказать быстрее что ли или проще)
ну так ответь себе на вопросы:
что будет если программист пользователь твоего кода забудет ввызвать InitializeLog?
а если он(программист) захочет создать несколько логгеров?
а если он передаст объект логгера по значению, а не по ссылке?
Helldrg
-15 / 55 / 1
Регистрация: 10.01.2011
Сообщений: 1,100
23.02.2013, 00:05  [ТС]     Как передать ссылку на объект в класс #26
Цитата Сообщение от Jupiter Посмотреть сообщение
что будет если программист пользователь твоего кода забудет вызывать InitializeLog?
Ну я так подумал лучше открывать файл для записи только один раз и закрывать тоже только 1. Инитиалайз в самом начале поставил в мейне и все)
Цитата Сообщение от Jupiter Посмотреть сообщение
а если он передаст объект логгера по значению, а не по ссылке?
Вы имеете в виду, что нужно сделать проверку типов и значений параметров?
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
23.02.2013, 03:33     Как передать ссылку на объект в класс #27
Цитата Сообщение от Helldrg Посмотреть сообщение
Ну я так подумал лучше открывать файл для записи только один раз и закрывать тоже только 1. Инитиалайз в самом начале поставил в мейне и все)
для инициализации существует конструктор
Цитата Сообщение от Helldrg Посмотреть сообщение
Вы имеете в виду, что нужно сделать проверку типов и значений параметров?
объекты потоков нельзя скопировать, и при попытке передать объект логгера по значению возникнет ошибка, но все же лучше явно запретить копирование логгера
Helldrg
-15 / 55 / 1
Регистрация: 10.01.2011
Сообщений: 1,100
23.02.2013, 15:14  [ТС]     Как передать ссылку на объект в класс #28
Цитата Сообщение от Jupiter Посмотреть сообщение
явно запретить копирование логгера
Это как?
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
23.02.2013, 15:16     Как передать ссылку на объект в класс #29
Цитата Сообщение от Helldrg Посмотреть сообщение
Это как?
C++
1
2
3
private:
    LogClass(const LogClass&);
    LogClass& operator = (const LogClass&);
в с++11:
C++
1
2
3
private:
    LogClass(const LogClass&) = delete;
    LogClass& operator = (const LogClass&) = delete;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2013, 15:18     Как передать ссылку на объект в класс
Еще ссылки по теме:
C++ Как передать объект в функцию
C++ Как в многопоточность передать объект класса? C++
C++ Как правильно передать объект fstream в функцию
C++ Не могу понять, как правильно передать указатель на объект в файл
Как правильно передать объект в функцию при использовании многопоточности C++

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

Или воспользуйтесь поиском по форуму:
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
23.02.2013, 15:18     Как передать ссылку на объект в класс #30
Цитата Сообщение от Jupiter Посмотреть сообщение
= delete;
что это значит???

Добавлено через 52 секунды
Цитата Сообщение от Jupiter Посмотреть сообщение
в с++11:
а.. не прочитал. Опять эти новые стандарты, которые не поймёшь зачем вводят.
Был язык Си. Нет, надо было испортить
Yandex
Объявления
23.02.2013, 15:18     Как передать ссылку на объект в класс
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru