Помогите найти ошибку!
От: artgonch  
Дата: 07.11.03 06:08
Оценка:
Вот, что выдает компилятор C++ Builder 6 (SP2):
[C++ Error] new(46): E2316 'malloc' is not a member of 'std'
[C++ Error] new(46): E2272 Identifier expected
[C++ Error] AccountManagmentFrm.cpp(39): E2277 Lvalue required
И переходит на файл new. Что это может быть. В синтаксисе, кажется, все правильно.
Re: Помогите найти ошибку!
От: ArtDenis Россия  
Дата: 07.11.03 06:18
Оценка:
Здравствуйте, artgonch, Вы писали:

A>Вот, что выдает компилятор C++ Builder 6 (SP2):

A>[C++ Error] new(46): E2316 'malloc' is not a member of 'std'
A>[C++ Error] new(46): E2272 Identifier expected
A>[C++ Error] AccountManagmentFrm.cpp(39): E2277 Lvalue required
A>И переходит на файл new. Что это может быть. В синтаксисе, кажется, все правильно.

Всё элементарно! Ошибки в строках 39 и 46!!!
... << RSDN@Home 1.1 beta 1 >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[2]: Помогите найти ошибку!
От: artgonch  
Дата: 07.11.03 09:53
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>Здравствуйте, artgonch, Вы писали:


A>>Вот, что выдает компилятор C++ Builder 6 (SP2):

A>>[C++ Error] new(46): E2316 'malloc' is not a member of 'std'
A>>[C++ Error] new(46): E2272 Identifier expected
A>>[C++ Error] AccountManagmentFrm.cpp(39): E2277 Lvalue required
A>>И переходит на файл new. Что это может быть. В синтаксисе, кажется, все правильно.

AD>Всё элементарно! Ошибки в строках 39 и 46!!! :))


Нет, это не элеиментарно. Иначче бы я не спрашивал. Дело в том, что ошибка вознгикает в коде формы, когда я подсоединяю ее к пустому проекты (оконного приложения). Когда я подсоединяю форму с уже существующему проекту, такой ошибки не возникает. Во всех проектах используется одна и та же версия STL. Так что говорить, что все элементарно, глупо. Может быть, что-то с Билдером?
Re: Помогите найти ошибку!
От: londinium Украина  
Дата: 08.11.03 15:00
Оценка:
Здравствуйте, artgonch, Вы писали:

A>Вот, что выдает компилятор C++ Builder 6 (SP2):

A>[C++ Error] new(46): E2316 'malloc' is not a member of 'std'
A>[C++ Error] new(46): E2272 Identifier expected
A>[C++ Error] AccountManagmentFrm.cpp(39): E2277 Lvalue required
A>И переходит на файл new. Что это может быть. В синтаксисе, кажется, все правильно.

Вот что пишет А.Я.Архангельский "Лучше использовать функцию new-delete.Это пожелание становится безусловной необходимостью, если речь идет о размещении в памяти объектов библиотеки компонентов Borland C++ Builder. Вообще все пособия по Builder или Visual C++ очень рекомендуют именно new, а не malloc.

С уважением, Сергей
Re[2]: Помогите найти ошибку!
От: artgonch  
Дата: 09.11.03 05:41
Оценка:
Здравствуйте, londinium, Вы писали:

L>Здравствуйте, artgonch, Вы писали:


A>>Вот, что выдает компилятор C++ Builder 6 (SP2):

A>>[C++ Error] new(46): E2316 'malloc' is not a member of 'std'
A>>[C++ Error] new(46): E2272 Identifier expected
A>>[C++ Error] AccountManagmentFrm.cpp(39): E2277 Lvalue required
A>>И переходит на файл new. Что это может быть. В синтаксисе, кажется, все правильно.

L>Вот что пишет А.Я.Архангельский "Лучше использовать функцию new-delete.Это пожелание становится безусловной необходимостью, если речь идет о размещении в памяти объектов библиотеки компонентов Borland C++ Builder. Вообще все пособия по Builder или Visual C++ очень рекомендуют именно new, а не malloc.


L>С уважением, Сергей


А я их и не использовал! Это вылетает в исходных текстах из STL. Хотя в явном виде я ни один заголовок из STL не продключал. Наверное, у меня где-то пропущена точка запятой. Но гле, яч не могу понять, потому что в одном проекте форма компилируется, а в пустом (шаблон оконного приложения, сгенерированный Билдером) не хочет.
Re[3]: Помогите найти ошибку!
От: ArtDenis Россия  
Дата: 09.11.03 05:49
Оценка:
Здравствуйте, artgonch, Вы писали:
A>А я их и не использовал! Это вылетает в исходных текстах из STL. Хотя в явном виде я ни один заголовок из STL не продключал. Наверное, у меня где-то пропущена точка запятой. Но гле, яч не могу понять, потому что в одном проекте форма компилируется, а в пустом (шаблон оконного приложения, сгенерированный Билдером) не хочет.

Ты бы хоть код привёл.
... << RSDN@Home 1.1 beta 1 >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[4]: Помогите найти ошибку!
От: artgonch  
Дата: 09.11.03 12:41
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>Ты бы хоть код привёл.

Привожу:
1. Заголовок.
//---------------------------------------------------------------------------

#ifndef AccountManagmentFrmH
#define AccountManagmentFrmH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <CheckLst.hpp>
#include "types.h"
#include <vector>
//---------------------------------------------------------------------------
class TfrmAccountManagment : public TForm
{
__published:    // IDE-managed Components
        TGroupBox *rgpUserList;
        TLabel *Label1;
        TComboBox *cbxUserList;
        TButton *btnAddUser;
        TButton *btnRemoveUser;
        TButton *btnEditUser;
        TRadioGroup *rgpUserType;
        TLabel *Label2;
        TCheckListBox *clbUserRights;
        TButton *btnOk;
        TButton *btnCancel;
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
        void __fastcall rgpUserTypeClick(TObject *Sender);
        void __fastcall clbUserRightsClickCheck(TObject *Sender);
        void __fastcall cbxUserListChange(TObject *Sender);
        void __fastcall btnRemoveUserClick(TObject *Sender);
        void __fastcall btnAddUserClick(TObject *Sender);
        void __fastcall btnEditUserClick(TObject *Sender);
private:
public:        // User declarations
        __fastcall TfrmAccountManagment(TComponent* Owner);
private:
        //TUSER_ACCAUNT_RECORD * Accounts;
        std::vector<TUSER_ACCAUNT_RECORD> Accounts;
        void __fastcall SetUserRightsControlsValues(int UserIndex);
        bool init;
};
//---------------------------------------------------------------------------
extern PACKAGE TfrmAccountManagment *frmAccountManagment;
//---------------------------------------------------------------------------
#endif

2. CPP-файл.
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "AccountManagmentFrm.h"
#include <IniFiles.hpp>
#include "NameNPassWrdFrm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmAccountManagment *frmAccountManagment;

static const String USER_LIST_PATH(".\\users.ini");

extern TUSER_ACCAUNT_RECORD MainUserAccount;

//---------------------------------------------------------------------------
__fastcall TfrmAccountManagment::TfrmAccountManagment(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

#pragma argsused
void __fastcall TfrmAccountManagment::FormCreate(TObject *Sender)
{
     init = true;
     TIniFile * ini;
     try
     {
          // Çàãðóçèòü ñïèñîê ïîëüçîâàòåëåé
          ini = new TIniFile(USER_LIST_PATH);
          ini->ReadSections(cbxUserList->Items);
          //Accounts = new TUSER_ACCAUNT_RECORD[ cbxUserList->Items->Count ];

          // Äëÿ êàæäîãî ïîëüçîâàòåëÿ ïðî÷åñòü ñïèñîê åãî ïàðàìåòðîâ
          for (int i = 0; i < cbxUserList->Items->Count; i++)
          {
               //
               TUSER_ACCAUNT_RECORD acnt;
               String & s = cbxUserList->Items->Strings[ i ];
               acnt.UserName = s;
               acnt.PassWrd  = ini->ReadString(s, "PassWrd", "");
               ((int)acnt.UserType) = ini->ReadInteger(s, "UserType", 1);
               bool DfltRights = acnt.UserType == utADMIN;
               acnt.CanClear = ini->ReadBool(s, "CanClear", DfltRights);
               acnt.CanImport = ini->ReadBool(s, "CanImport", DfltRights);
               acnt.CanExport = ini->ReadBool(s, "CanExport", DfltRights);
               acnt.CanViewRating = ini->ReadBool(s, "CanViewRating", true);
               acnt.CanBuildText = ini->ReadBool(s, "CanBuildText", true);
               acnt.CanBuildFullText = ini->ReadBool(s, "CanBuildFullText", DfltRights);
               Accounts.push_back(acnt);
          } /* for (int i = 0; i < cbxUserList->Items->Count; i++) */

          for (int i = 0; i < cbxUserList->Items->Count; i++)
               if (MainUserAccount.UserName.AnsiCompare(cbxUserList->Items->Strings[ i ]) == 0)
               {
                    cbxUserList->ItemIndex = i;
                    cbxUserListChange(cbxUserList);
                    rgpUserType->ItemIndex = 0;
                    break;
               }
     }
     __finally
     {
          delete ini;
          init = false;
     }
}
//---------------------------------------------------------------------------

#pragma argsused
void __fastcall TfrmAccountManagment::FormClose(TObject *Sender,
      TCloseAction &Action)
{
     if (ModalResult == mrCancel)
     {
          Action = caHide;
          return;
     }
     // Ñîõðàíåíèå íàñòðîåê äëÿ âñå ïîëüçîâàòåëåé
     TIniFile * ini;
     try
     {
          ini = new TIniFile(USER_LIST_PATH);
          for (int i = 0; i < cbxUserList->Items->Count; i++)
          {
               String & s = cbxUserList->Items->Strings[ i ];
               ini->WriteString(s, "PassWrd", Accounts[ i ].PassWrd);
               ini->WriteInteger(s, "UserType", Accounts[ i ].UserType);
               // Çàïèñü ðàçðåøåíèé ïîëüçîâàòåëÿ
               ini->WriteBool(s, "CanClear", Accounts[ i ].CanClear);
               ini->WriteBool(s, "CanExport", Accounts[ i ].CanExport);
               ini->WriteBool(s, "CanImport", Accounts[ i ].CanImport);
               ini->WriteBool(s, "CanViewRating", Accounts[ i ].CanViewRating);
               ini->WriteBool(s, "CanBuildText", Accounts[ i ].CanBuildText);
               ini->WriteBool(s, "CanBuildFullText", Accounts[ i ].CanBuildFullText);
          }
     }
     __finally
     {
          delete ini;
     }
     Action = caFree;
}
//---------------------------------------------------------------------------

#pragma argsused
void __fastcall TfrmAccountManagment::rgpUserTypeClick(TObject *Sender)
{
     // Åñëè âûáðàí òèï àäìèíèñòðàòîðà
     if (cbxUserList->ItemIndex == -1 || init)
          return;

     if (rgpUserType->ItemIndex == 0)
     {
/*          if (MessageDlg("Äàòü ïîëüçîâàòåëþ ïðàââà àäìèíèñòðàòîðà?", mtConfirmation,
               TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes)*/
          {
               Accounts[ cbxUserList->ItemIndex ].InitForAdmin();
               clbUserRights->Enabled = false;
          }
     }
     else
     {
/*          if (MessageDlg("Ïîíèçèòü àäìèíèñòðàòîðà äî ïîëüçîâàòåëÿ?", mtConfirmation,
               TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes)*/
          {
               Accounts[ cbxUserList->ItemIndex ].InitForUser();
               clbUserRights->Enabled = MainUserAccount.UserName.AnsiCompare(cbxUserList->Items->Strings[ cbxUserList->ItemIndex ]) == 0;
          }
     }
     //SetUserRightsControlsValues(cbxUserList->ItemIndex);
}
//---------------------------------------------------------------------------

#pragma argsused
void __fastcall TfrmAccountManagment::clbUserRightsClickCheck(
      TObject *Sender)
{
     TUSER_ACCAUNT_RECORD & uar = Accounts[ cbxUserList->ItemIndex ];
     switch (clbUserRights->ItemIndex)
     {
          // Îïóñòîøåíèå ÁÄ
          case 0:
               uar.CanClear = clbUserRights->Checked[ clbUserRights->ItemIndex ];
          break;

          // Ýêìïîðò ÁÄ
          case 1:
               uar.CanExport = clbUserRights->Checked[ clbUserRights->ItemIndex ];
          break;

          // Èìïîðò ÁÄ
          case 2:
               uar.CanImport = clbUserRights->Checked[ clbUserRights->ItemIndex ];
          break;

          // Ïðîñìîòð ðåéòèíãîâ
          case 3:
               uar.CanViewRating = clbUserRights->Checked[ clbUserRights->ItemIndex ];
          break;

          // Ñîçäàíèå ïðîñòîãî òåêñòà
          case 4:
               uar.CanBuildText = clbUserRights->Checked[ clbUserRights->ItemIndex ];
          break;

          // Ñîçäàíèå ñëîæíîãî òåêñòà
          case 5:
               uar.CanBuildFullText = clbUserRights->Checked[ clbUserRights->ItemIndex ];
          break;

          default: break;
     }
}
//---------------------------------------------------------------------------

#pragma argsused
void __fastcall TfrmAccountManagment::cbxUserListChange(TObject *Sender)
{
     // Óñòàíîâêà ôëàæêîâ
     SetUserRightsControlsValues(cbxUserList->ItemIndex);
     // Óñòàíîâêà îàçðåøåíèé íà èçìåíåíèå ïðàâ ïîëüçîâàòåëåé
/*     if (Accounts[ cbxUserList->ItemIndex ].UserType != utADMIN)
     {
          rgpUserType->Enabled   = false;
          clbUserRights->Enabled = false;
          btnEditUser->Enabled   = false;
          btnAddUser->Enabled    = false;
          btnRemoveUser->Enabled = false;
     }
     else
     {
          rgpUserType->Enabled   = true;
          clbUserRights->Enabled = true;
          btnEditUser->Enabled   = true;
          btnAddUser->Enabled    = true;
          btnRemoveUser->Enabled = true;
     } */
}
//---------------------------------------------------------------------------


void __fastcall TfrmAccountManagment::SetUserRightsControlsValues(int UserIndex)
{
     clbUserRights->Checked[ 0 ] = Accounts[ UserIndex ].CanClear;
     clbUserRights->Checked[ 1 ] = Accounts[ UserIndex ].CanExport;
     clbUserRights->Checked[ 2 ] = Accounts[ UserIndex ].CanImport;
     clbUserRights->Checked[ 3 ] = Accounts[ UserIndex ].CanViewRating;
     clbUserRights->Checked[ 4 ] = Accounts[ UserIndex ].CanBuildText;
     clbUserRights->Checked[ 5 ] = Accounts[ UserIndex ].CanBuildFullText;
     if (Accounts[ UserIndex ].UserType == utADMIN)
     {
          rgpUserType->ItemIndex = 0;
     }
     else
     {
          rgpUserType->ItemIndex = 1;
     }
     clbUserRights->Enabled = rgpUserType->ItemIndex == 0;
/*     btnAddUser->Enabled = Accounts[ UserIndex ].UserType == utADMIN;
     btnRemoveUser->Enabled = Accounts[ UserIndex ].UserType == utADMIN;
     btnEditUser->Enabled = Accounts[ UserIndex ].UserType == utADMIN;*/
}
//---------------------------------------------------------------------------

#pragma argsused
void __fastcall TfrmAccountManagment::btnRemoveUserClick(TObject *Sender)
{
     if (MessageDlg("Âû óâåðåíû?", mtConfirmation,
          TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes)
     {
/*          for (int i = cbxUserList->ItemIndex; i < cbxUserList->Items->Count - 1; i++)
               Accounts[ i ] = Accounts[ i + 1 ];*/
          cbxUserList->Items->Delete(cbxUserList->ItemIndex);
          Accounts.erase(&Accounts[ cbxUserList->ItemIndex ]);
     }
}
//---------------------------------------------------------------------------

#pragma argsused
void __fastcall TfrmAccountManagment::btnAddUserClick(TObject *Sender)
{
     String Name, Password;
     TfrmNameNPassWrd * dlg;
     try
     {
          dlg = new TfrmNameNPassWrd(Application);
          if (dlg->GetNameAndPassword(&Name, &Password))
          {
               /*TUSER_ACCAUNT_RECORD * tmp = new TUSER_ACCAUNT_RECORD[ cbxUserList->Items->Count + 1 ];
               memcpy(tmp, Accounts, sizeof(TUSER_ACCAUNT_RECORD) * cbxUserList->Items->Count);
               delete []Accounts;
               Accounts = tmp;*/
               TUSER_ACCAUNT_RECORD acnt;
               acnt.InitForUser();
               cbxUserList->Items->Add(Name);
               acnt.UserName = Name;
               acnt.PassWrd  = Password;
               acnt.UserType = utUSER;
               acnt.InitForUser();
               Accounts.push_back(acnt);
          }
     }
     __finally
     {
          delete dlg;
     }
}
//---------------------------------------------------------------------------

#pragma argsused
void __fastcall TfrmAccountManagment::btnEditUserClick(TObject *Sender)
{
     String Name, Password;
     TfrmNameNPassWrd * dlg;
     try
     {
          dlg = new TfrmNameNPassWrd(Application);
          // Ïîëó÷åíèå ñòàðîãî ïàðîëÿ
          if (dlg->GetNameAndPassword(&Name, &Password,
               false, true, false))
          {
               // Ïðîâåðêà ïàðîëÿ
               if (Password == Accounts[ cbxUserList->ItemIndex ].PassWrd)
               {
                    Password = NULL;
                    if (dlg->GetNameAndPassword(&Name, &Password,
                         false))
                    {
                         Accounts[ cbxUserList->ItemIndex ].PassWrd = Password;
                    }
               }
          }
     }
     __finally
     {
          delete dlg;
     }

}
//---------------------------------------------------------------------------


Используется BCB 6.0 Build 10.166
Re[5]: Помогите найти ошибку!
От: ArtDenis Россия  
Дата: 09.11.03 15:00
Оценка:
Здравствуйте, artgonch, Вы писали:
AD>>Ты бы хоть код привёл.
A>Привожу:
A>...

А что за файл types.h? Он стоит как раз перед включением <vector>. Может там что не так???
... << RSDN@Home 1.1 beta 1 >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[6]: Помогите найти ошибку!
От: artgonch  
Дата: 10.11.03 16:39
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>Здравствуйте, artgonch, Вы писали:

AD>>>Ты бы хоть код привёл.
A>>Привожу:
A>>...

AD>А что за файл types.h? Он стоит как раз перед включением <vector>. Может там что не так???


Даю исходник этого файла:
#ifndef _TYPES_H_
#define _TYPES_H_

#ifndef _TYPES_H_
#define _TYPES_H_

#include <System.hpp>

// ╚чьхэхэшх 10.10.2003
typedef enum
{
     fdDEF,
     fdPERSON,
     fdANAL_SRC,
     fdAUTHORS,
     fdCYT_AUTH,
     fdAUTH_CYT,
     fdTRANSLATER,
     fdName,
     fdSrc,
     fdUNKNOWN = -1
} FIELD_TYPE;

typedef struct _DateStruct
{
        unsigned short Day;
        unsigned short Month;
        unsigned short Year;
     _DateStruct()
     {
          Day = Month = Year = 0;
     };
     bool operator == (_DateStruct & DS)
     {
          return (Day == DS.Day) && (Month == DS.Month) && (Year == DS.Year);
     };
} DateStruct;

typedef struct _TimeStruct
{
        unsigned short Minute;
        unsigned short Hour;
        _TimeStruct()
        {
             Minute = Hour = 0;
        };
        bool operator == (_TimeStruct & TS)
        {
             return (Minute == TS.Minute) && (Hour == TS.Hour);
        };
} TimeStruct;

typedef struct RECORD_TAG
{
        int Offset;
        int InfLen;
        unsigned int Number;
        DateStruct Date;
        TimeStruct Time;

        int c1;
        char Defs[ 150 ];

        int c2;
        char Person[ 150 ];

        int c3;
        char AnalSrc[ 150 ];

        int c4;
        char Authors[ 150 ];

        int c5;
        char CytAuth[ 150 ];

        int c6;
        char AuthCyt[ 150 ];

        // ╚чьхэхэшх 10.10.2003
        // ═хюсїюфшью фы  фюсртыхэш  эютюую Єшяр фхёъЁшяЄюЁр
        int c7;
        char Translater[ 50 ];

        char Name[ 150 ];
        // ╚чьхэхэшх 17.10.2003
        char shortName[ 100 ];
        // ********************

        char Src[ 300 ];
        // ╚чьхэхэшх 17.10.2003
        char shortSrc[ 100 ];
        // ********************
        // ╚чьхэхэшх 18.10.2003
        int iStub;
        // ********************

        char KBO [ 100 ];
        char Expert[ 100 ];
} RECORD_TYPE;

typedef struct
{
     char Key[ 400 ];
     int Rating;
} RATING_REC_TYPE;

typedef enum {utADMIN, utUSER} USER_TYPE;

// ╚чьхэхэшх 06.11.2003
typedef struct
{
     String UserName;    // ╚ь  яюы№чютрЄхы 
     String PassWrd;     // ╧рЁюы№
     USER_TYPE UserType; // ╥шя яюы№чютрЄхы 

     bool CanClear;
     bool CanImport;
     bool CanExport;
     bool CanViewRating;
     bool CanBuildText;
     bool CanBuildFullText;

     // ═рёЄЁющъш яю-єьюыўрэш■ фы  рфьшэшёЄЁрЄюЁр
     void InitForAdmin()
     {
          CanClear         = true;
          CanExport        = true;
          CanImport        = true;
          CanViewRating    = true;
          CanBuildText     = true;
          CanBuildFullText = true;
     }

     // ═рёЄЁющъш яю-єьюыўрэш■ фы  яюы№чютрЄхы 
     void InitForUser()
     {
          CanClear         = false;
          CanExport        = false;
          CanImport        = false;
          CanViewRating    = true;
          CanBuildText     = true;
          CanBuildFullText = true;
     }
} TUSER_ACCAUNT_RECORD;

#endif
Re[7]: Помогите найти ошибку!
От: ArtDenis Россия  
Дата: 10.11.03 17:28
Оценка:
Здравствуйте, artgonch, Вы писали:
AD>>А что за файл types.h? Он стоит как раз перед включением <vector>. Может там что не так???
A>Даю исходник этого файла:
A>...

Удаляем первые две строчки и радуемся жизни:
#ifndef _TYPES_H_
#define _TYPES_H_
... << RSDN@Home 1.1 beta 1 >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[8]: Помогите найти ошибку!
От: artgonch  
Дата: 11.11.03 16:25
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>Здравствуйте, artgonch, Вы писали:

AD>>>А что за файл types.h? Он стоит как раз перед включением <vector>. Может там что не так???
A>>Даю исходник этого файла:
A>>...

AD>Удаляем первые две строчки и радуемся жизни: :)

AD>
AD>#ifndef _TYPES_H_
AD>#define _TYPES_H_
AD>


Почему? Ведь эти директивы избавляют меня от дублирования кода при включении файла в несколько cpp-файлов! Что-то я не очень понимаю. В первую очередб я грешил именно на такие ошибки. Проверил все файлы, но они этими директивами защищены.
Re[9]: Помогите найти ошибку!
От: ArtDenis Россия  
Дата: 11.11.03 17:43
Оценка:
Здравствуйте, artgonch, Вы писали:

A>Почему? Ведь эти директивы избавляют меня от дублирования кода при включении файла в несколько cpp-файлов! Что-то я не очень понимаю. В первую очередб я грешил именно на такие ошибки. Проверил все файлы, но они этими директивами защищены.


Так они у тебя идут два раза друг за другом:

#ifndef _TYPES_H_
#define _TYPES_H_

#ifndef _TYPES_H_ // а где #endif для этого #ifndef ???
#define _TYPES_H_

#include <System.hpp>
... << RSDN@Home 1.1 beta 1 >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.