Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2018, 15:34   #1
welcom1008
Новичок
Джуниор
 
Регистрация: 13.08.2018
Сообщений: 3
По умолчанию error C2352 или как правильно вызвать метод из внешнего СРР

Добрый день. Изучаю С++ и в процессе возникла ошибка.

есть некий клас и реализация методов
Log.h
Код:
class clTestLog:public fstream
{
public:
	std::ofstream fileLog;
	clTestLog(); //констр
	~clTestLog();
  virtual int saveDataLog(int iData);
  virtual int saveDataLog(string sData);

};
Log.cpp реализация вышеуказанных методов и создан обьект clTestLog filelog;
Далее гдето в другом CPP надо вызвать saveDataLog но как его вызвать правильно чтоб небыло ошибок?
Если так
Код:
clTestLog::saveDataLog("5556778757\n");
Компилятор ругается error C2352: 'clTestLog::saveDataLog' : illegal call of non-static member function
log.h(14) : see declaration of 'clTestLog::saveDataLog'

а если так
Код:
filelog.saveDataLog("5556778757\n");
Дает ошибку error C2065: 'filelog' : undeclared identifier

Подскажите, как правильно вызвать метод из другого класа? Спасибо.
welcom1008 вне форума Ответить с цитированием
Старый 13.08.2018, 15:35   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Создать экземпляр (a.k.a. объект) класса.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 13.08.2018, 15:38   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,694
По умолчанию

1. Использовать extern и вызывать через объект, у вас же не статическая функция.
2. Использовать inline переменную.
p51x вне форума Ответить с цитированием
Старый 13.08.2018, 15:50   #4
welcom1008
Новичок
Джуниор
 
Регистрация: 13.08.2018
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Создать экземпляр (a.k.a. объект) класса.
Оьбект создан clTestLog filelog, но в Log.cpp, а работать с ним нужно в другом срр.
Пробовал extern и вызывать через объект так:
new.cpp
Код:
extern clTestLog fileLog;
.....
filelog.saveDataLog("5556778757\n");
Ошибка
error C2065: 'filelog' : undeclared identifier
error C2228: left of '.saveDataLog' must have class/struct/union

Хожу вокруг да около...что то делаю не так, но что?
welcom1008 вне форума Ответить с цитированием
Старый 13.08.2018, 15:53   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Это просто поле класса. Надо например сделать его static.
Ну и вызывать тогда через clTestLog::
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 13.08.2018, 15:53   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,694
По умолчанию

filelog и fileLog это два разных идентификатора
p51x вне форума Ответить с цитированием
Старый 13.08.2018, 16:23   #7
welcom1008
Новичок
Джуниор
 
Регистрация: 13.08.2018
Сообщений: 3
По умолчанию

Нашел ошибку. нужно было в другом срр, его хидере в описании класса обьявить обьект
Код:
clTestLog filelog;
можно также и через указатель только потом в теле создать его
описание класса clTestLog* filelog;
реазизация метода pfilelog = new clTestLog;
ну и потом не забыть его деструктором убить. Как то так
welcom1008 вне форума Ответить с цитированием
Старый 13.08.2018, 16:33   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,694
По умолчанию

Не нашли. А объявлять переменные в хедерах без инлайна чревато...
p51x вне форума Ответить с цитированием
Старый 14.08.2018, 12:01   #9
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Не нашли. А объявлять переменные в хедерах без инлайна чревато...
с инлайном - ещё чреватее.
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как вызвать input через функцию или if Айрат Р. Помощь студентам 2 09.01.2017 11:40
С++ Visual как правильно вызвать функцию с указателем? Blondy Помощь студентам 6 03.04.2012 16:14
Как вызвать перекрытый метод из предка. shude Visual C++ 1 10.02.2011 19:22
Как вызвать метод из другого класса в C# KobolD Помощь студентам 6 25.06.2010 14:12
Как правильно присвоить javascript значение и вызвать в php? Wasanna Помощь студентам 0 25.02.2010 19:09