Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не видит определенной структуры 
:(
    Опции темы
CyberDemon
Дата 23.8.2008, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 11.10.2003
Где: Нижний Новгород

Репутация: нет
Всего: нет



Модераторы, заранее прошу не переносить в другой раздел, т.к. хоть и используется MFC, речь не про него.
Значит есть два класса. CSendSMSDlg:

Код

#pragma once
#include <assert.h>
#include "resource.h"
#include "SerialGate.h"
#include "MakeMess.h"
#include "afxcmn.h"
#include "bcmenu.h"
#include "systemtray.h"
#include "newgroup.h"
#include "database.h"
#include "errorcode.h"
#include "abonentdlg.h"
#include <vector>

#define WM_FROM_TRAY 0x1000
#define MAX_NAME 260
#define MAX_ABONENT_NAME 64

typedef struct sDATE{
    UINT iDay;
    UINT iMon;
    UINT iYear;
} _sDATE;

typedef struct ABONENT{
    DWORD dwIndex;
    DWORD iGroupId;
    DWORD iSubGroupId;
    char cFirstName[MAX_ABONENT_NAME];
    char cSecondName[MAX_ABONENT_NAME];
    char cSurName[MAX_ABONENT_NAME];
    char cNomber[12];
    char cEMail[MAX_ABONENT_NAME];
    sDATE dataBirsday;
    BOOL bSendBirsday;
    char cComment[MAX_NAME];
}_ABONENT;

typedef struct GROUPS{
    DWORD dwIndex;
    long dwSubGroup;
    char cName[MAX_NAME];
    TVINSERTSTRUCT tvInsert;
}_GROUPS;

// CSendSMSDlg dialog
class CMakeMess;
class SerialGate;
class CSystemTray;
//class CNewGroup;
class CSendSMSDlg : public CDialog
{
    friend class CDataBase;
// Construction
public:
    CSendSMSDlg(CWnd* pParent = NULL);    // standard constructor
    virtual ~CSendSMSDlg();
// Dialog Data
    enum { IDD = IDD_SENDSMS_DIALOG };

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

//Далее много ерунды.....


И еще есть CAbonentDlg:
Код

#pragma once
#include "sendsmsdlg.h"
//#include "resource.h"

// CAbonentDlg dialog

class CSendSMSDlg;
class CAbonentDlg : public CDialog
{
    DECLARE_DYNAMIC(CAbonentDlg)

public:
    CAbonentDlg(CSendSMSDlg* pParent = NULL);   // standard constructor
    virtual ~CAbonentDlg();
    enum abonent_mode{modeCreate, modeEdit};


// Dialog Data
    enum { IDD = IDD_ABONENT };

protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

    DECLARE_MESSAGE_MAP()
public:
    virtual INT_PTR DoModal(DWORD State, ABONENT* abonent, DWORD dwCurGroup);
private:
    ABONENT ab;
    bool MakeDataForAddition();
    void MakeDataForEdit();
public:
    void GetData(ABONENT* abonent);
private:
    COleDateTime pEditDate;
    BOOL bCongratulation;
    CComboBox conGroup;
    CImageList conImage;
    CSendSMSDlg* pParent;
};


При компиляции вылазит кучу ошибок. Такое чувство, что класс CAbonentDlg не знает про структуру ABONENT.

Все ошибки ругаются именно на эту структуру. Вот они:
Код

AbonentDlg.h(26): error C2061: syntax error : identifier 'ABONENT'
AbonentDlg.h(28): error C2501: 'CAbonentDlg::ABONENT' : missing storage-class or type specifiers
AbonentDlg.h(28): error C2146: syntax error : missing ';' before identifier 'ab'


И так везде, где в классе CAbonentDlg пытаешься объявить структуру. Наверняка какая-нить мелкая кракозябра, но ни как не могу найти....
PM MAIL ICQ   Вверх
Alek86
Дата 23.8.2008, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



у тебя слово ABONENT в определении структуры как-то коряво написано - наверное а русскими буквами
Ctrl+F даже по этой странице находит только 1 "ABONENT"


--------------------
user posted image    user posted image
PM MAIL   Вверх
CyberDemon
Дата 23.8.2008, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 11.10.2003
Где: Нижний Новгород

Репутация: нет
Всего: нет



Проверил. Прошелся поиском по проекту и по странице. У меня все нашлось. Да и в определении врятли ошибка есть. Еще кучу классов юзают эту структуру и там ошибок нет. На всякий случай инклуду из работающего класса закопипастил в CAbonentDlg и на всякий случай имя структуры тоже. Нет эфекта. :(

Это сообщение отредактировал(а) CyberDemon - 23.8.2008, 17:16
PM MAIL ICQ   Вверх
mes
Дата 23.8.2008, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(CyberDemon @  23.8.2008,  16:42 Найти цитируемый пост)
И так везде, где в классе CAbonentDlg пытаешься объявить структуру. Наверняка какая-нить мелкая кракозябра, но ни как не могу найти.... 


в исходнике наблюдается взаимное включение хидеров, т.е в sendsmsdlg.h -  #include "abonentdlg.h", а в abonentdlg.h - #include "sendsmsdlg.h"


Это сообщение отредактировал(а) mes - 23.8.2008, 17:56


--------------------
PM MAIL WWW   Вверх
CyberDemon
Дата 23.8.2008, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 11.10.2003
Где: Нижний Новгород

Репутация: нет
Всего: нет



Цитата(mes @ 23.8.2008,  17:44)
в исходнике наблюдается взаимное включение хидеров, т.е в sendsmsdlg.h -  #include "abonentdlg.h", а в abonentdlg.h - #include "sendsmsdlg.h"

правильно. А как еще может CAbonentDlg узнать о CSendSMSDlg, и соответственно обо всех структурах, объявленный в этом хедере? Разве что присать отдельный хедер, исключительно для определения, и включать его во все остальные хедеры. Но это очень долго и неморно. А в CSendSMSDlg включен CAbonentDlg потому, что именно от туда и вызывается CAbonentDlg::DoModal().
PM MAIL ICQ   Вверх
mes
Дата 23.8.2008, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



перенесите строчку #include "sendsmsdlg.h" из abonentdlg.h  в abonentdlg.cpp
 и тоже самое с реализацией связанной с  CSendSMSDlg..


Это сообщение отредактировал(а) mes - 23.8.2008, 18:32


--------------------
PM MAIL WWW   Вверх
CyberDemon
Дата 23.8.2008, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 11.10.2003
Где: Нижний Новгород

Репутация: нет
Всего: нет



Спасибо за идею. Все заработало. Переделал так:

defines.h
Код

//Здесь определяются структуры, используемые в программе
#pragma once

#define WM_FROM_TRAY 0x1000
#define MAX_NAME 260
#define MAX_ABONENT_NAME 64

typedef struct sDATE{
    UINT iDay;
    UINT iMon;
    UINT iYear;
} _sDATE;

typedef struct ABONENT{
    DWORD dwIndex;
    DWORD iGroupId;
    DWORD iSubGroupId;
    char cFirstName[MAX_ABONENT_NAME];
    char cSecondName[MAX_ABONENT_NAME];
    char cSurName[MAX_ABONENT_NAME];
    char cNomber[12];
    char cEMail[MAX_ABONENT_NAME];
    sDATE dataBirsday;
    BOOL bSendBirsday;
    char cComment[MAX_NAME];
}_ABONENT;

typedef struct GROUPS{
    DWORD dwIndex;
    long dwSubGroup;
    char cName[MAX_NAME];
    TVINSERTSTRUCT tvInsert;
}_GROUPS;


SendSMSDlg.h
Код

// SendSMSDlg.h : header file
// Хедер основного диалогового окна

#pragma once
#include <assert.h>
#include "resource.h"
#include "SerialGate.h"
#include "MakeMess.h"
#include "afxcmn.h"
#include "bcmenu.h"
#include "systemtray.h"
#include "newgroup.h"
#include "database.h"
#include "errorcode.h"
#include "abonentdlg.h"
#include <vector>
#include "defines.h" //Фаил определения


// CSendSMSDlg dialog
class CMakeMess;
class SerialGate;
class CSystemTray;
//class CNewGroup;
class CSendSMSDlg : public CDialog
{
    friend class CDataBase;
// Construction
public:
    CSendSMSDlg(CWnd* pParent = NULL);    // standard constructor
    virtual ~CSendSMSDlg();
// Dialog Data
    enum { IDD = IDD_SENDSMS_DIALOG };

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support


// Implementation
protected:
    HICON m_hIcon;

    // Generated message map functions
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnBnClickedSend();
    void Message(UINT message);
protected:
    inline GROUPS* RecreateGroup(DWORD dwSize){if(dwSize==0)return 0;
                                                if(dwSizeGroupBase != 0) delete [] group;
                                                group = new GROUPS[dwSize];
                                                dwSizeGroupBase = dwSize;return group;};
    inline ABONENT* RecreateAbonent(DWORD dwSize){if(dwSize==0)return 0;
                                                if(dwSizeNomberBase != 0) delete [] abonent;
                                                abonent = new ABONENT[dwSize];
                                                dwSizeNomberBase = dwSize;return abonent;};
    inline DWORD GetGroups(GROUPS* gr){gr = group; return dwSizeGroupBase;};
    inline DWORD GetAbonents(ABONENT* ab){ab = abonent; return dwSizeNomberBase;}
private:
    CSystemTray* m_SysTray;
    BOOL TransmitData(HANDLE hCom, char *cData, DWORD DataSize);
    SerialGate* pGate;
    CMakeMess* pMake;
    bool TextWithoutNull(char* cText, char* cOut, DWORD iLen, DWORD iOutSize);
    void Error(DWORD dwError);
    BOOL DataTransmit(char* cData, char* cNomber);
    CString m_strPhoneNomber;
    CString m_strTextMessage;
    //Shift string to one symbol to left. First symbol will be deleted.
    void ShiftNomber(char* cNomber);
    CListCtrl m_conList;
    CTreeCtrl m_conTree;
    CImageList m_conImageForTree;
    CImageList m_conImageForList;
    void InitObjects();
    void InitTree();
    void MakeList(NM_TREEVIEW* pNMTreeView = NULL);
    GROUPS* group;
    ABONENT* abonent;
    HTREEITEM* hTree;
    BCMenu bcMenu;
    afx_msg void OnNMSetfocusTree(NMHDR *pNMHDR, LRESULT *pResult);
    afx_msg void OnNMKillfocusTree(NMHDR *pNMHDR, LRESULT *pResult);
    afx_msg void OnNMSetfocusElement(NMHDR *pNMHDR, LRESULT *pResult);
    afx_msg void OnNMKillfocusElement(NMHDR *pNMHDR, LRESULT *pResult);
    DWORD dwSizeNomberBase;
    DWORD dwSizeGroupBase;
    afx_msg void OnCreateGroup();
    afx_msg void OnRemoveGroup();
    void DeleteAbonent(DWORD dwIndex);
    afx_msg void OnNMClickTree(NMHDR *pNMHDR, LRESULT *pResult);
    afx_msg void OnNMDblclkTree(NMHDR *pNMHDR, LRESULT *pResult);
    afx_msg void OnTvnSelchangedTree(NMHDR *pNMHDR, LRESULT *pResult);
    CDataBase* pDataBase;
    bool bChange, bQuestion;
    void AddObjectToTree(DWORD dwIndex);
    void AddObjectToList(DWORD dwIndex);
    void DeleteObjectFromTree(DWORD dwIndex);
    void DeleteObjectFromList(DWORD dwIndex);
    void NullGarbage();
    afx_msg void OnDestroy();
    afx_msg void OnClose();
    afx_msg void OnExit();
    afx_msg void OnTrayExit();
    afx_msg void OnBaseSave();
    afx_msg void OnGroupRename();
    virtual BOOL PreTranslateMessage(MSG* pMsg);
    afx_msg void OnTvnEndlabeleditTree(NMHDR *pNMHDR, LRESULT *pResult);
    afx_msg void OnNMDblclkElement(NMHDR *pNMHDR, LRESULT *pResult);
    typedef struct OBJLIST{
        UINT idElementType;
        DWORD iIndexList;
        DWORD iIndexData;
    }_OBJLIST;
    void AddObjectToObjectList(DWORD Type, DWORD iIndexData);
    std::vector<OBJLIST> object;
public:
    afx_msg void OnAddAbonent();
};


AbonentDlg.h
Код

//Хедер катрочки абонента
#pragma once
#include "defines.h"
#include "resource.h"

// CAbonentDlg dialog

class CSendSMSDlg;
class CAbonentDlg : public CDialog
{
    DECLARE_DYNAMIC(CAbonentDlg)

public:
    CAbonentDlg(CWnd* pParent = NULL);   // standard constructor
    virtual ~CAbonentDlg();
    enum abonent_mode{modeCreate, modeEdit};


// Dialog Data
    enum { IDD = IDD_ABONENT };

protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

    DECLARE_MESSAGE_MAP()
public:
    virtual INT_PTR DoModal(DWORD State, ABONENT* abonent, DWORD dwCurGroup);
private:
    ABONENT ab;
    bool MakeDataForAddition();
    void MakeDataForEdit();
public:
    void GetData(ABONENT* abonent);
    void SetData(ABONENT* abonent);
private:
    COleDateTime pEditDate;
    BOOL bCongratulation;
    CComboBox conGroup;
    CImageList conImage;
    CSendSMSDlg* pParent;
};


Но все же вопрос остался. Почему такое было?
И еще, я уже давно не программил, только недавно сел и стал впоминать. Может кто-нить сможет навести позитивную критику по коду, который я вверху привел?
PM MAIL ICQ   Вверх
mes
Дата 23.8.2008, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(CyberDemon @  23.8.2008,  19:31 Найти цитируемый пост)
Но все же вопрос остался. Почему такое было?

почитайте на тему  forward declaration и с чем ее едят в Cpp. )


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0753 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.