Автор
|
Тема: Не получается создать обьект собственного класса в VC++
|
Mustang |
опубликован 17-11-2001 01:43 MSK
Опять возникла трабла с 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
Ты более чем наверняка забыл вставить include "...h" перед объявлением переменной. |
Mustang
|
опубликован 17-11-2001 11:55 MSK
Добавил я #include "CarsObj.h" во все фаилы *.cpp этого проекта. Так, что это как бы исключено...Какие ещё могут быть варианты? |
Mustang
|
опубликован 17-11-2001 16:02 MSK
Кажется я разобрался в чём моя проблемма! :( Только легче от этого не стало. Всё дело в месте создания обьекта. Я с самого начала чувствую какую-то дизориентацию в этом визуальном C++. При автоматическом создании заготовки посредством "ClassWizard" будь то SDI, MDI, или Dialog приложение имеется несколько стандартных классов (классы приложения, вида, документа, диалога...). Когда вставляешь в этот скелет свой код (не просто обработку сообщений, а какой-то свой алгоритм) возникает ряд абстрактных вопросов (для меня), как то - 1. Куда вставлять непосредственно тело алгоритма (своей программы)? 2. Где обьявлять переменные для этого тела? 3. Где обьявляются глобальные переменные?Заранее благодарен за участие! |
zlelik
|
опубликован 17-11-2001 23:19 MSK
>1. Куда вставлять непосредственно тело алгоритма (своей программы)?Создается два файла class.h и class.cpp В первом прототип класса, а во втором его реализацию. В class.cpp файл нужно включить stdafx.h (если делал приложение AppWizard'ом) AppWizard сам эти создает файлы. Там есть что-то типа создать класс и он сам все создаст. >3. Где обьявляются глобальные переменные? С точки зрения Объектно ориентированного программирования глобальных переменных должно быть поминимуму. А лучше вообще не должно быть. |
Demo_S
|
опубликован 18-11-2001 00:11 MSK
но ведь твой алгоритм должен действовать в ответ на какое-то действие пользователя. вот в обработку сообщения, ответственного за это действие и вставляй его. или просто вызывай оттуда свой класс. |
Mustang
|
опубликован 18-11-2001 00:56 MSK
Фууух! Кажется на меня снизашло... Куда и как вставлять вроде бы разобрался и теперь всё работает как часы.2zlelik А по поводу жизни без глобальных переменных, тогда как обеспчивать доступ к переменным из других классов, если они их совершенно не видят? 2All Спасибо за посты!!! |
zlelik
|
опубликован 18-11-2001 02:14 MSK
Обмен данными между классами делается описанием объекта одного класса в другом классе. В языке C# вообще нельзя описывать глобальные переменные в целях безопасности. |
Mustang
|
опубликован 18-11-2001 13:40 MSK
Описанием значит обьявлением? (если я правильно понял) Но если я обьявлю обьект одного класса в другом классе, то как я получу тот же обьект в третьем классе? После обьявления это уже будет новый (другой) обьект (или есть какая-то функция?). |
Flex Ferrum
|
опубликован 19-11-2001 10:28 MSK
Для этого вместо непосредственно экземпляра класса передают указатель на него или ссылку. Тогда ты можешь разделить объект между несколькими другими. А в принципе, ограничение на применение глобаольных переменных такоеже как и на goto - если иначе не получается, то используй, но не злоупотребляй. Если в проекте появляется слишком много глобальных переменных - это значит, что надо переработать дизайн проекта. К тому же, необходимо стремиться к использванию абстрактных интерфейсов классов, а из абстрактного интерфейса глобального объекта не сделаешь. |
Mustang
|
опубликован 20-11-2001 02:17 MSK
Всем спасибо, с обменом данными разобрался (без глобализации). :) А если всёже создовать глобальные переменные, где они обьявляются? Не в обьекте ли theApp?
|
Flex Ferrum
|
опубликован 20-11-2001 10:01 MSK
Глобальные переменные - они потому и глобальные, что не принадлежат ни одному объекту. По сему, объявляешь их где-нибудь за пределами объявлений классов:#include "stdafx.h" #include ... //Глобальные переменные int global1; float global2; // И т. д. |
Sergius
|
опубликован 20-11-2001 13:08 MSK
Если так сильно хочешь глобальную переменную - заведи ее в stdafx.h, тогда ее точно _все_ увидят. |
Flex Ferrum
|
опубликован 20-11-2001 15:01 MSK
Sergius: Необходимо добавить, что в stdafx.h переменную необходимо только объявлять: extern int var_name; А то человек замучается ошибку линкера искать (если делать: int var_name; ). |
maxvid
|
опубликован 22-11-2001 07:05 MSK
TheApp и есть глобальный объект. |