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

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

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

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

20.02.2013, 00:39. Просмотров 1924. Ответов 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++ Как передать в метод класса ссылку на экземпляр
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.02.2013, 00:58     Как передать ссылку на объект в класс #2
Цитата Сообщение от Helldrg Посмотреть сообщение
ClassA->Function(&Log);
Log и так объявлен как указатель, не надо брать у него адрес
Helldrg
-15 / 55 / 1
Регистрация: 10.01.2011
Сообщений: 1,100
20.02.2013, 01:02  [ТС]     Как передать ссылку на объект в класс #3
если написать так
C++
1
ClassA->Function(Log);
То напишет: аргумент типа LogClass* несовместим с параметром типа LogClass*
И что делать в этом случае?)
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.02.2013, 01:09     Как передать ссылку на объект в класс #4
Не видно, что где подключено.
Helldrg
-15 / 55 / 1
Регистрация: 10.01.2011
Сообщений: 1,100
20.02.2013, 01:25  [ТС]     Как передать ссылку на объект в класс #5
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
54
55
56
57
58
59
60
61
62
63
64
log.h
#include <fstream>
class LogClass
{
public:
    bool InitializeLog();
    void Write(char*);
void ShutdownLog();
private:
    std::ofstream m_fout;
};
 
 
log.cpp
#include "log.h"
    bool LogClass::InitializeLog()
{
m_fout.open("file.txt");
}
    void LogClass::Write(char* errorText)
{
m_fout << errorText << std::endl;
}
void LogClass::ShutdownLog()
{
m_fout.close();
}
private:
    std::ofstream m_fout;
};
 
 
main.h
#include "Cclassa.h"
#include "logclass.h"
int main()
{
 
LogClass* Log;
Log = new LogClass;
Log.InitializeLog();
Cclassa* classa;
classa = new Cclassa;
classa->Function(&Log);
Log.ShutdownLog();
return 0;
 }
 
 
CclassA.cpp
#include "cclassa.h"
bool SystemClass::Function(LogClass* Log)
{
    Log->Write("Hello");
return true;
}
 
cclassa.h
#include "logclass.h"
class Cclassa
{
public:
    bool Function(LogClass*);
};
Типа такого
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.02.2013, 01:28     Как передать ссылку на объект в класс #6
Где-то лишнее подключение. logclass.h не вижу... Что там?
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
20.02.2013, 01:31     Как передать ссылку на объект в класс #7
ссылки тут и близко не используются.
Не стоит путать оператор & и объявление ссылок.

Цитата Сообщение от alsav22 Посмотреть сообщение
Где-то лишнее подключение. logclass.h не вижу... Что там?
в этой строчке
Цитата Сообщение от Helldrg Посмотреть сообщение
main.h
#include "Cclassa.h"
#include "logclass.h"
тут "Cclassa.h" в свою очередь второй раз инклудит логкласс
Helldrg
-15 / 55 / 1
Регистрация: 10.01.2011
Сообщений: 1,100
20.02.2013, 01:31  [ТС]     Как передать ссылку на объект в класс #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Где-то лишнее подключение. logclass.h не вижу... Что там?
Бывают лишние подключения?) Так то да у меня в двух местах подключается, а как этого избегать?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.02.2013, 01:33     Как передать ссылку на объект в класс #9
И вот это неправильно.
Цитата Сообщение от Helldrg Посмотреть сообщение
Log.InitializeLog();
Цитата Сообщение от Helldrg Посмотреть сообщение
Log.ShutdownLog();
Log же указатель. Значит:
C++
1
2
Log ->InitializeLog();
Log ->ShutdownLog();
Helldrg
-15 / 55 / 1
Регистрация: 10.01.2011
Сообщений: 1,100
20.02.2013, 01:38  [ТС]     Как передать ссылку на объект в класс #10
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
в этой строчке
Сообщение от Helldrg
main.h
#include "Cclassa.h"
#include "logclass.h"
тут "Cclassa.h" в свою очередь второй раз инклудит логкласс
Я убрал от туда инклюд у меня теперь:
error C2039: 'Log' : is not a member of 'LogClass'

Добавлено через 1 минуту
а нет))
Теперь у меня запускается, но вырубается сразу

Добавлено через 52 секунды
Run-Time Check Failure #3 - The variable 'Log' is being used without being initialized.

Добавлено через 34 секунды
Ураа работает))

Добавлено через 1 минуту
Я просто строчку закоментил одну спасибо большое!!!
P.S.:А такой способ ведения ошибок нормальный или другой можете посоветовать?)
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.02.2013, 01:42     Как передать ссылку на объект в класс #11
Цитата Сообщение от Helldrg Посмотреть сообщение
но вырубается сразу
В main(), перед return 0; поставьте system("pause");

Добавлено через 3 минуты
Цитата Сообщение от Helldrg Посмотреть сообщение
P.S.:А такой способ ведения ошибок нормальный или другой можете посоветовать?)
Такой - это какой?
Helldrg
-15 / 55 / 1
Регистрация: 10.01.2011
Сообщений: 1,100
20.02.2013, 10:03  [ТС]     Как передать ссылку на объект в класс #12
Цитата Сообщение от alsav22 Посмотреть сообщение
Сообщение от Helldrg
P.S.:А такой способ ведения ошибок нормальный или другой можете посоветовать?)
Такой - это какой?
ну у меня есть класс, который в файл будет записывать ошибку например:
C++
1
2
3
4
5
6
CclassB* ClassB = new CclassB;
if(!ClassB)
{
Log->Write("Номер ошибки","Название ошибки","текст ошибки","рекомендации по устранению");
return 0;
}
У меня такой способ ведения ошибок, подскажите, может есть что нибудь более универсальное))
ITcrusader
Эксперт C++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
20.02.2013, 11:45     Как передать ссылку на объект в класс #13
Цитата Сообщение от Helldrg Посмотреть сообщение
Бывают лишние подключения?) Так то да у меня в двух местах подключается, а как этого избегать?
Твои заголовочные файлы должны иметь следующий вид (пусть имя заголовочного файла: "Header.h"):

C++
1
2
3
4
5
6
7
#pragma once
#ifndef HEADER_H
#define HEADER_H
 
// тут все содержимое заголовочного файла...
 
#endif
Тогда даже если ты случайно этот файл дважды включишь в единицу трансляции, он по факту заинклудится один раз
Helldrg
-15 / 55 / 1
Регистрация: 10.01.2011
Сообщений: 1,100
20.02.2013, 12:30  [ТС]     Как передать ссылку на объект в класс #14
Спасибо большое! Полезная вещь!!!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2013, 14:51     Как передать ссылку на объект в класс
Еще ссылки по теме:
C++ Как передать объект в функцию
C++ Как в многопоточность передать объект класса? C++
C++ Как правильно передать объект fstream в функцию
C++ Не могу понять, как правильно передать указатель на объект в файл
Как правильно передать объект в функцию при использовании многопоточности C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.02.2013, 14:51     Как передать ссылку на объект в класс #15
Это способ применять следует, но это не исключает множественности включений. Это работает для компилятора, который в каждую единицу времени видит одну единицу трансляции, поэтому и сработает, если двойные включения находятся в одном файле. Если же двойные включения в разных файлах, то этот способ уже не поможет, потому что для компилятора всё будет нормально. Увидит только компоновщик, который видит все файлы.
Цитата Сообщение от ITcrusader Посмотреть сообщение
а как этого избегать?
Не помещать реализации (в частности реализации специализаций методов-функций) в .h файлы, только прототипы (исключения для шаблонов). Следить, и компоновщик подскажет.
Yandex
Объявления
20.02.2013, 14:51     Как передать ссылку на объект в класс
Ответ Создать тему
Опции темы

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