WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Не получается создать обьект собственного класса в VC++

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Не получается создать обьект собственного класса в VC++
Mustang опубликован 17-11-2001 01:43 MSK   Click Here to See the Profile for Mustang   Click Here to Email Mustang  
Опять возникла трабла с Visual C++! Может это просто опять поздно и... :)

Создал я следующий класс:

class CCarsObj
{
public:
void Set_numberofmodels(int models_amount);
bool cars_amount_created;
CString* object_price;
CString* object_models;
CString object_car;
CCarsObj();
virtual ~CCarsObj();

};

#endif // !defined(AFX_CARSOBJ_H__10D6C50C_B385_43C1_A915_21332292CC65__INCLUDED_)

и далее

CCarsObj::CCarsObj()
{
cars_amount_created=false;
}

CCarsObj::~CCarsObj()
{
if(cars_amount_created==true)
{
delete [] object_models;
delete [] object_price;
}
}

void CCarsObj::Set_numberofmodels(int models_amount)
{
if(cars_amount_created==true)
{
delete [] object_models;
delete [] object_price;
cars_amount_created=false;
}
object_models=new CString [models_amount];
object_price=new CString[models_amount];
cars_amount_created=true;
}

Далее в тексте программы пытаюсь создать переменную эетого класса

CCarsObj mycars;

и вот что он (компилятор) мне на это говорит:

цитата "error C2146: syntax error : missing ';' before identifier 'mycars' "

и далее

"error C2501: 'CCarsObj' : missing storage-class or type specifiers"
"error C2501: 'mycars' : missing storage-class or type specifiers"

Помогите пожалуйста!

Заранее благодарен.

HOMO_PROGRAMMATIS опубликован 17-11-2001 09:23 MSK     Click Here to See the Profile for HOMO_PROGRAMMATIS  Click Here to Email HOMO_PROGRAMMATIS     
Ты более чем наверняка забыл вставить include "...h" перед объявлением переменной.
Mustang опубликован 17-11-2001 11:55 MSK     Click Here to See the Profile for Mustang  Click Here to Email Mustang     
Добавил я #include "CarsObj.h"
во все фаилы *.cpp этого проекта. Так, что это как бы исключено...

Какие ещё могут быть варианты?

Mustang опубликован 17-11-2001 16:02 MSK     Click Here to See the Profile for Mustang  Click Here to Email Mustang     
Кажется я разобрался в чём моя проблемма! :(
Только легче от этого не стало.
Всё дело в месте создания обьекта. Я с самого начала чувствую какую-то дизориентацию в этом визуальном C++.
При автоматическом создании заготовки посредством "ClassWizard" будь то SDI, MDI, или Dialog приложение имеется несколько стандартных классов (классы приложения, вида, документа, диалога...). Когда вставляешь в этот скелет свой код (не просто обработку сообщений, а какой-то свой алгоритм) возникает ряд абстрактных вопросов (для меня), как то -
1. Куда вставлять непосредственно тело алгоритма (своей программы)?
2. Где обьявлять переменные для этого тела?
3. Где обьявляются глобальные переменные?

Заранее благодарен за участие!

zlelik опубликован 17-11-2001 23:19 MSK     Click Here to See the Profile for zlelik  Click Here to Email zlelik     
>1. Куда вставлять непосредственно тело алгоритма (своей программы)?

Создается два файла
class.h и class.cpp
В первом прототип класса, а во втором его реализацию. В class.cpp файл нужно включить stdafx.h (если делал приложение AppWizard'ом)
AppWizard сам эти создает файлы. Там есть что-то типа создать класс и он сам все создаст.
>3. Где обьявляются глобальные переменные?
С точки зрения Объектно ориентированного программирования глобальных переменных должно быть поминимуму. А лучше вообще не должно быть.

Demo_S опубликован 18-11-2001 00:11 MSK     Click Here to See the Profile for Demo_S  Click Here to Email Demo_S     
но ведь твой алгоритм должен действовать в ответ на какое-то действие пользователя. вот в обработку сообщения, ответственного за это действие и вставляй его. или просто вызывай оттуда свой класс.
Mustang опубликован 18-11-2001 00:56 MSK     Click Here to See the Profile for Mustang  Click Here to Email Mustang     
Фууух! Кажется на меня снизашло...
Куда и как вставлять вроде бы разобрался и теперь всё работает как часы.

2zlelik
А по поводу жизни без глобальных переменных, тогда как обеспчивать доступ к переменным из других классов, если они их совершенно не видят?

2All
Спасибо за посты!!!

zlelik опубликован 18-11-2001 02:14 MSK     Click Here to See the Profile for zlelik  Click Here to Email zlelik     
Обмен данными между классами делается описанием объекта одного класса в другом классе. В языке C# вообще нельзя описывать глобальные переменные в целях безопасности.
Mustang опубликован 18-11-2001 13:40 MSK     Click Here to See the Profile for Mustang  Click Here to Email Mustang     
Описанием значит обьявлением? (если я правильно понял)
Но если я обьявлю обьект одного класса в другом классе, то как я получу тот же обьект в третьем классе? После обьявления это уже будет новый (другой) обьект (или есть какая-то функция?).
Flex Ferrum опубликован 19-11-2001 10:28 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
Для этого вместо непосредственно экземпляра класса передают указатель на него или ссылку. Тогда ты можешь разделить объект между несколькими другими. А в принципе, ограничение на применение глобаольных переменных такоеже как и на goto - если иначе не получается, то используй, но не злоупотребляй. Если в проекте появляется слишком много глобальных переменных - это значит, что надо переработать дизайн проекта. К тому же, необходимо стремиться к использванию абстрактных интерфейсов классов, а из абстрактного интерфейса глобального объекта не сделаешь.
Mustang опубликован 20-11-2001 02:17 MSK     Click Here to See the Profile for Mustang  Click Here to Email Mustang     
Всем спасибо, с обменом данными разобрался (без глобализации). :)
А если всёже создовать глобальные переменные, где они обьявляются? Не в обьекте ли theApp?
Flex Ferrum опубликован 20-11-2001 10:01 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
Глобальные переменные - они потому и глобальные, что не принадлежат ни одному объекту. По сему, объявляешь их где-нибудь за пределами объявлений классов:

#include "stdafx.h"
#include ...

//Глобальные переменные

int global1;
float global2;
// И т. д.

Sergius опубликован 20-11-2001 13:08 MSK     Click Here to See the Profile for Sergius  Click Here to Email Sergius     
Если так сильно хочешь глобальную переменную - заведи ее в stdafx.h, тогда ее точно _все_ увидят.
Flex Ferrum опубликован 20-11-2001 15:01 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
Sergius:
Необходимо добавить, что в stdafx.h переменную необходимо только объявлять:
extern int var_name;
А то человек замучается ошибку линкера искать (если делать:
int var_name;
).
maxvid опубликован 22-11-2001 07:05 MSK     Click Here to See the Profile for maxvid  Click Here to Email maxvid     
TheApp и есть глобальный объект.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.