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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2011, 02:33   #1
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию не создается указатель на класс

в общем мне компилятор пишет ошибка про то что символ main не известен, не смотря на то, что я его создал, вот собственно код:

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <string.h>

#include "Unit1.h"
#include "modul.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
Main * main=new Main();
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
Memo1->Lines->Text=main->GetTotal();
}
//---------------------------------------------------------------------------
код модуля:
Код:
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
#include "System.hpp"
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <vcl.h>
#include <iostream.h>
#include <string.h>
#include <fstream.h>
#include <conio.h>
//------------------
using namespace std;
class CGeneral{
        protected:
                String street,house,phone;
                String GetStreet();
                String GetHouse();
                String GetPhone();
                void SetStreet(String x);
                void SetHouse(String x);
                void SetPhone(String x);
        public:
                __property String STREET={read=GetStreet,write=SetStreet};
                __property String HOUSE={read=GetHouse,write=SetHouse};
                __property String PHONE={read=GetPhone,write=SetPhone};
                CGeneral(ifstream &base);
                CGeneral(String newstreet,String newhouse,String newphone);
};
//--------------------------
class CPeople:public CGeneral{
        protected:
                String name,surname,otch,room;
                String GetName();
                String GetSurname();
                String GetOtch();
                String GetRoom();
                void SetName(String x);
                void SetSurname(String x);
                void SetOtch(String x);
                void SetRoom(String x);
        public:
                __property String NAME={read=GetName,write=SetName};
                __property String SURNAME={read=GetSurname,write=SetSurname};
                __property String OTCH={read=GetOtch,write=SetOtch};
                __property String ROOM={read=GetRoom,write=SetRoom};
        CPeople(ifstream &base):CGeneral(base){
                   string x;
                   base>>x;
                   NAME=x.c_str();
                   base>>x;
                   SURNAME=x.c_str();
                   base>>x;
                   OTCH=x.c_str();
                   base>>x;
                   ROOM=x.c_str();
        };
        CPeople(String newstreet,String newhouse,String newphone,String newname,String newsurname,String newotch,String newroom):CGeneral(newstreet,newhouse,newphone){
                NAME=newname;
                SURNAME=newsurname;
                OTCH=newotch;
                ROOM=newroom;
        };
};
//---------------------------------------------------
class CPlant:public CGeneral{
        protected:
                String fname;
                String GetFName();
                void SetFName(String x);
        public:
                __property String FNAME={read=GetFName,write=SetFName};
                CPlant(ifstream &base):CGeneral(base){
                        string x;
                        base>>x;
                        FNAME=x.c_str();
                }
                CPlant(String newstreet,String newhouse,String newphone,String newname):CGeneral(newstreet,newhouse,newphone){
                        FNAME=newname;
                }
};
//------------------------------------------------
class Main{
        protected:
                CGeneral *g[1000];
        public:
                int n;
                Main();
                String GetTotal();
};
//---------------------------------------------------------------------------

#endif
CodeNOT вне форума Ответить с цитированием
Старый 04.01.2011, 02:37   #2
Donatello
Форумчанин
 
Аватар для Donatello
 
Регистрация: 22.12.2010
Сообщений: 109
По умолчанию

мб я ошибаюсь но помойму main не может быть именем класса, т.к. оно зарезервировано и может использоваться в программе только 1 раз, в книге которую щас читаю было подробнее написано по этому поводу, но дословно не помню, а искать сейчас не могу, убегать пора.
Я бы изменил мир, но бог не дает исходников (c)

И сказал мыслитель, напиши свою проблему на бумаге и ты увидишь свои ошибки.
Donatello вне форума Ответить с цитированием
Старый 04.01.2011, 03:02   #3
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

Ну я поменял название на MakeClass * m=new MakeClass(); та же сама ситуация
CodeNOT вне форума Ответить с цитированием
Старый 04.01.2011, 11:48   #4
UltimaBeaR
Форумчанин
 
Аватар для UltimaBeaR
 
Регистрация: 21.12.2010
Сообщений: 199
По умолчанию

а без строчки Memo1->Lines->Text=main->GetTotal(); компилируется?
ЗЫ: с этими вашими щи++ быдлерами одни проблемы)
ЗЗЫ: есть подозрение что из-за того что метод клика по кнопке объявлен как __fastcall (это вроде что-то типо inline) ему запрещается использовать вещи, которые не видны внешне из модуля, в твоем случае main будет виден тока в текущей .cpp-шке, попробуй сделать там же просто функцию обычную и внутри нее подобный код

Последний раз редактировалось UltimaBeaR; 04.01.2011 в 11:51.
UltimaBeaR вне форума Ответить с цитированием
Старый 04.01.2011, 12:10   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
ЗЗЫ: есть подозрение что из-за того что метод клика по кнопке объявлен как __fastcall (это вроде что-то типо inline)
fastcall это соглашение о вызове.
два первых параметра идут через регистры процессора, остальное через стек.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатель на абстрактный класс zhenya.ya Общие вопросы C/C++ 0 11.11.2010 23:51
[C++] Указатель на производный класс в базовом Student_IT Общие вопросы C/C++ 3 06.06.2010 07:06
Указатель на класс Колючка* Общие вопросы Delphi 8 21.01.2010 07:38
Не создается указатель на vector! mahsus Общие вопросы C/C++ 7 11.01.2008 16:07
Вернут указатель на базовый класс Crucian Общие вопросы C/C++ 2 08.11.2007 18:10