Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

20.02.2013, 00:39. Просмотров 2069. Ответов 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");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2013, 00:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как передать ссылку на объект в класс (C++):

Как в функции my_function преобразовать ссылку на базовый класс в ссылку на класс B или С - C++
Всем привет, как в функции my_function преобразовать ссылку на базовый класс в ссылку на класс B или С ? class A { public: A(); ...

Недопустимый неполный тип , или как передать в функцию указатель на объект класса , или просто объект - C++
Други мои , кодеры. Не могу я ни как передать в функцию объект класса , или что еще лучше(для меня , так как учусь работать с указателями)...

Как вернуть ссылку на объект? - C++
Вот код из книжки А.Крупника "Изучаем С++" char suits = {'','—','','’'}; char cds = {'6','7','8','9','A','‚','„','Š','’'}; ...

Как функции возвратить ссылку на объект? - C++
//Есть некая функция что писать перед функцией??? Инт написал. int func(){ // Создаем какой-то обьект Obj object_1; //что-то с ней...

Как передать ссылку на переменную по UDP? - C++
Все в пределах одного компьютера. Две программы. Одна имеет переменную int r; Вторая должна получить ссылку и считывать в любое...

Как передать в функцию ссылку на структуру? - C++
Добрый вечер, помогите пожалуйста разобраться. Нужно чтобы функция myProc принимала не структуру, а ссылку на структуру.struct vs { long...

29
Kuzia domovenok
2031 / 1875 / 169
Регистрация: 25.03.2012
Сообщений: 6,465
Записей в блоге: 1
20.02.2013, 20:38 #16
Цитата Сообщение от alsav22 Посмотреть сообщение
Это способ применять следует, но это не исключает множественности включений. Это работает для компилятора, который в каждую единицу времени видит одну единицу трансляции, поэтому и сработает, если двойные включения находятся в одном файле. Если же двойные включения в разных файлах, то этот способ уже не поможет, потому что для компилятора всё будет нормально. Увидит только компоновщик, который видит все файлы.
Ничего не понял, короче, можно пример, когда этот способ не сработает.
Вообще, инклуд-guardы хороши, но лучше всяких guardов поможет просто держать в голове, какие файлы есть в проекте. Какие заголовки куда подключаются. И по возможности самому контролировать это, не включая второй раз заголовок, который уже включён внутри одного из заголовков проекта.
Вообще, если есть возможность, то избегать вложенных инклудов внутри h-файлов,

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

Добавлено через 5 минут
Специализация шаблона
1
Helldrg
26 / 55 / 1
Регистрация: 10.01.2011
Сообщений: 1,108
22.02.2013, 16:04  [ТС] #20
Вы имеете ввиду реализацию класса в .сpp делать а прототипы в .h?
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 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
Ну уж либо одно, либо другое.
1
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.02.2013, 16:46 #22
Цитата Сообщение от Helldrg Посмотреть сообщение
Вы имеете ввиду реализацию класса в .сpp делать а прототипы в .h?
Да. Кроме шаблонов.
1
Helldrg
26 / 55 / 1
Регистрация: 10.01.2011
Сообщений: 1,108
22.02.2013, 19:08  [ТС] #23
Ну это хорошо я всегда так пишу))
А если шаблоны писать в классе то потом ошибки не будет?(Это просто так еще раз уточнить)
И еще, помните я говорил, что хороший ли это способ создания логера(журнала) ошибок, так вот можете на него ответить?) Может быть в сpp есть функция или еще что то, которая выводит ошибки или сохраняет их. Или может класс лучше переписать, что бы был более как бы так сказать быстрее что ли или проще)
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.02.2013, 19:28 #24
Цитата Сообщение от Helldrg Посмотреть сообщение
А если шаблоны писать в классе то потом ошибки не будет?
Прототип шаблона и его реализация должны быть в одном файле(но не специализация).
Цитата Сообщение от Helldrg Посмотреть сообщение
И еще, помните я говорил, что хороший ли это способ создания логера(журнала) ошибок, так вот можете на него ответить?) Может быть в сpp есть функция или еще что то, которая выводит ошибки или сохраняет их. Или может класс лучше переписать, что бы был более как бы так сказать быстрее что ли или проще)
На этот вопрос у меня ответа нет.
1
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.02.2013, 19:36 #25
Цитата Сообщение от Helldrg Посмотреть сообщение
Или может класс лучше переписать, что бы был более как бы так сказать быстрее что ли или проще)
ну так ответь себе на вопросы:
что будет если программист пользователь твоего кода забудет ввызвать InitializeLog?
а если он(программист) захочет создать несколько логгеров?
а если он передаст объект логгера по значению, а не по ссылке?
1
Helldrg
26 / 55 / 1
Регистрация: 10.01.2011
Сообщений: 1,108
23.02.2013, 00:05  [ТС] #26
Цитата Сообщение от Jupiter Посмотреть сообщение
что будет если программист пользователь твоего кода забудет вызывать InitializeLog?
Ну я так подумал лучше открывать файл для записи только один раз и закрывать тоже только 1. Инитиалайз в самом начале поставил в мейне и все)
Цитата Сообщение от Jupiter Посмотреть сообщение
а если он передаст объект логгера по значению, а не по ссылке?
Вы имеете в виду, что нужно сделать проверку типов и значений параметров?
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
23.02.2013, 03:33 #27
Цитата Сообщение от Helldrg Посмотреть сообщение
Ну я так подумал лучше открывать файл для записи только один раз и закрывать тоже только 1. Инитиалайз в самом начале поставил в мейне и все)
для инициализации существует конструктор
Цитата Сообщение от Helldrg Посмотреть сообщение
Вы имеете в виду, что нужно сделать проверку типов и значений параметров?
объекты потоков нельзя скопировать, и при попытке передать объект логгера по значению возникнет ошибка, но все же лучше явно запретить копирование логгера
1
Helldrg
26 / 55 / 1
Регистрация: 10.01.2011
Сообщений: 1,108
23.02.2013, 15:14  [ТС] #28
Цитата Сообщение от Jupiter Посмотреть сообщение
явно запретить копирование логгера
Это как?
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 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;
1
Kuzia domovenok
2031 / 1875 / 169
Регистрация: 25.03.2012
Сообщений: 6,465
Записей в блоге: 1
23.02.2013, 15:18 #30
Цитата Сообщение от Jupiter Посмотреть сообщение
= delete;
что это значит???

Добавлено через 52 секунды
Цитата Сообщение от Jupiter Посмотреть сообщение
в с++11:
а.. не прочитал. Опять эти новые стандарты, которые не поймёшь зачем вводят.
Был язык Си. Нет, надо было испортить
1
23.02.2013, 15:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2013, 15:18
Привет! Вот еще темы с ответами:

Как передать в метод класса ссылку на экземпляр - C++
Есть класс class Class{ ... } Как передать в метод экземплер класса из которого вызывается этот метод? Пробывал так: class Class{ ...

Как передать объект в функцию - C++
Допустим у меня есть такой класс: class Abc { private: int a; public: void set_a(int A) { a = A;

C++ Как в многопоточность передать объект класса? - C++
Доброго времени суток! Подскажите пожалуйста одну вещь, у меня есть функция внутри класса и мне нужно передать её в мультипоточность. Вот...

Как правильно передать объект fstream в функцию - C++
При использовании следующего подхода возникают вопросы: int myFunc(fstream& data); 1. Если я открою поток из функции, можно ли его...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

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