Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
aae1
2 / 2 / 0
Регистрация: 05.01.2013
Сообщений: 69
#1

ошибка 2061 - C++

25.01.2014, 00:57. Просмотров 466. Ответов 15
Метки нет (Все метки)

Вопрос к знатокам почему если передаю структуру вот так вот в метод
C++
1
void MainClass::DeleteExampleSCR(MessageStruct *MsgStructSCR)

то возникает ошибка синтаксиса 2061


а если вот так вот а потом приведу к нужному типу то нет проблем


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void MainClass::DeleteExampleSCR(void *MsgStructSCR)      // Метод удалит не нужный экземпляр Screener
{
     MessageStruct *pMsgStructSCR =(MessageStruct *)MsgStructSCR;
 
     int namberDel = pMsgStructSCR->namberExample;     // вернем номер экземпляра который пришел от клиента
     if(namberDel!= 9999 && (pSCR_array[namberDel]->GetSymbol()) == (pMsgStructSCR->symbol))    // если  не 9999 ,  и Тикер в сообщеннии совпадает с транслируемым Тикером
     {  
       pSCR_array[namberDel]->InterruptTranslation();  // останавливаем трансляцию
       Sleep(20);                                      // прерывание нужно для пропуска  может придется увеличить его 
       delete pSCR_array[namberDel];                   // уничтожаем обьект
       pSCR_array[namberDel]=nullptr;                  // присваиваем указателю ноль
       countScreener--;                                // вычитаем из счетчика   
     }                              
}
Добавлено через 1 минуту
задолбался с этой ошибкой , все классы пиходиться так передавать !!! , если указываю в параметрах конкретный тип то такая ошибка , проект MFC

Добавлено через 3 минуты
C++
1
2
3
4
5
MainClass::MainClass(void * pMDlg , void *pPServer )
    {       
        pvPipeServer = pPServer;
        pvMainDlg = pMDlg;
     }

Вот так вот и в констуктор приходиться передавать иначе таже самая ошибка , а потом только внутри метода приводить к нужному типу , насколько важно это по скорости !!!!?????? , мне нужна скорость !!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2014, 00:57     ошибка 2061
Посмотрите здесь:

Ошибка при компиляции. Где ошибка? (Работа с классом) C++
C++ Вылетает ошибка error C2061: синтаксическая ошибка: идентификатор "_TCHAR"
Ошибка в конструкторе с параметром. Компилятор не ругается, но при запуске программы возникает ошибка C++
Выскакивает ошибка Stack around the voriable 'text' was corrupted. Подскажите пожалуйста в чём ошибка C++
C++ Укажите где ошибка (ошибка во время выполнения программы)
Синтаксическая ошибка: Ошибка 1 error C2059 C++
Ошибка 2 error LNK2019, не пойму в чем ошибка C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5410 / 4806 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.01.2014, 01:27     ошибка 2061 #2
Цитата Сообщение от aae1 Посмотреть сообщение
то возникает ошибка синтаксиса 2061
Компилятор показывает где?
aae1
2 / 2 / 0
Регистрация: 05.01.2013
Сообщений: 69
25.01.2014, 01:36  [ТС]     ошибка 2061 #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Компилятор показывает где?
Ошибка 4 error C2061: синтаксическая ошибка: идентификатор "MessageStruct" c:\users\андрей\documents\visual studio 2012\projects\lightspeedtrader\samples\vs2010\основной проект ls\lightspeedtraderapi_50\lightspeedtraderapidemo\MainClass.h 40 1 LightspeedTraderAPIDemo

Добавлено через 1 минуту
показывает в хедере где обьявлен метод
void MainClass::CreateNewExampleSCR(MessageStruct* pMsgStructSCR);
alsav22
5410 / 4806 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.01.2014, 01:48     ошибка 2061 #4
Цитата Сообщение от aae1 Посмотреть сообщение
показывает в хедере где обьявлен метод
void MainClass::CreateNewExampleSCR(MessageStruct* pMsgStructSCR);
Подчёркивает что-то? В подсказке, что пишет?
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
25.01.2014, 01:55     ошибка 2061 #5
DEl

Добавлено через 5 минут
А Где объявлена структура messаgеStruct?
alsav22
5410 / 4806 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.01.2014, 02:10     ошибка 2061 #6
Цитата Сообщение от aae1 Посмотреть сообщение
показывает в хедере где обьявлен метод
aae1, MessageStruct в этом хедере видна?
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.01.2014, 11:01     ошибка 2061 #7
если преобразование из void* в нужный тип работает, то вероятно в хедере достаточно сделать предварительное объявления типа:
C++
1
struct MessageStruct;
aae1
2 / 2 / 0
Регистрация: 05.01.2013
Сообщений: 69
25.01.2014, 12:22  [ТС]     ошибка 2061 #8
Вот это Хедер где прописана структура
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#pragma once
#include "afxcmn.h"
#include "MainClass.h"
 
 
 
struct MessageStruct  // структура для Сообщений
{
  public:   
    CString classData;
    CString enumerateData;
    CString message;
    CString symbol;
    int namberExample;
};
 
class MessageData 
{   
 public:        
    MessageData(void *pMainDlg, void* pPipeServer); 
    virtual ~MessageData();
    class MessageData *PointerObjMessageData() { return this; }  
 
    MessageStruct *pMsgStructSCR;     // структура для сообщений SCRENERy
    MessageStruct *pMsgStructOrder;   // структура для сообщений ORDERAm
    MessageStruct *pMsgStructMsg;     // структура для сообщений FULLQuote остальным классам
 
    void *pvMainDlg;         // указатель на главный класс обработки 
    void *pvPipeServer;      // указатель на Сервер
    
    
 
    void MessageData::IncomMessageSCR(CString messageClient);     // Метод обрабатывает сообщение от Клиента для SCREENER
    void MessageData::IncomMessageOrder(CString messageClient);   // Метод обрабатывает сообщение от Клиента для ORDER
    void MessageData::IncomMessageMsg(CString messageClient);     // Метод обрабатывает сообщение от Клиента для Общих сообщений MSG
 
    
private:
    void MessageData::InitStructSCR(CStringArray *arr_msg );     // инициализация структуры сообщением от клиента 
    void MessageData::InitStructOrder(CStringArray *arr_msg );   // инициализация структуры сообщением от клиента 
    void MessageData::InitStructMsg(CStringArray *arr_msg );     // инициализация структуры сообщением от клиента 
    
    void MessageData::MsgForScreener(); 
    void MessageData::MsgForOrder();     
    void MessageData::MsgForMsgData(); 
 
};


Вот второй хедер

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#pragma once
#include "afxcmn.h"
#include "FullQuote.h"
#include "Message.h"
 
//#include "PipeServer.h"
//#include "MainDemoLauncherDlg.h"
 
 class MainClass
{       
 public:            
    MainClass(void * pMDlg , void *pPServer);           
    virtual ~MainClass();
    class MainClass *PointerObjMainClass() { return this; }  // функция вернет указатель на этот обьект 
 
    void *pvPipeServer;
    void *pvMainDlg;
  
    /////////// Классы отправляющие данные на клиента  //////////
    TimeSales   *pTS_array[99];  
    BookLevel   *pBL_array[99];   
    BestQuote   *pBQ_array[99];    
    StaticData  *pSD_array[9999];    
    DynamicData *pDD_array[9999]; 
    Screener    *pSCR_array[9999];       // через этот будем управлять массивом  *pSR_array[9999];
    Chart       *pChart_array[9999];
    Order       *pOrder;
       
    
    int countScreener;             // общее количество запущенных экземпляров класса SCREENER
    int countBookLevel;            // общее количество запущенных экземпляров класса SCREENER
    int countTimeSales;            // общее количество запущенных экземпляров класса SCREENER
    int countBestQuote;            // общее количество запущенных экземпляров класса SCREENER
    int countStaticData;           // общее количество запущенных экземпляров класса SCREENER
    int countDynamicData;          // общее количество запущенных экземпляров класса SCREENER
    int countChart;                // общее количество запущенных экземпляров класса SCREENER
    
    
    // Методы
    
    void MainClass::CreateNewExampleSCR(MessageStruct *pMsgStructSCR);   // Метод создаст новый экземпляр Screener
    void MainClass::DeleteExampleSCR(void *pMsgStructSCR);      // Метод удалит экземпляр Screener
 
 
 
 
 
 
 
};
Добавлено через 18 минут
в .сpp MainClass описываю метод

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void MainClass::CreateNewExampleSCR(MessageStruct *pMsgStructSCR)   // Метод создаст новый экземпляр Screener
{ 
    //MessageStruct *pMsgStructSCR =(MessageStruct *)MsgStructSCR;
    if(countScreener < 9999)
    {
      // Сначала проверить все экземпляры не транслируется ли такой Тикер уже!!!!!  иначе  возможна двойная трансляция одного тикера              
                int namberNext = 0;  
                for (int i = 0; i < 9999; i++)     // ищем первый свободный экземпляр 
                {
                  if( pSCR_array[i] == nullptr)
                  {
                      namberNext = i;          // номер первого свободного экземпляра            
                      break;
                  }              
                }
 
                pSCR_array[namberNext] = new Screener((PipeServer*)pvPipeServer);  // создаем новый экземпляр  ИЗ массива экземпляров и присваиваем номер           
                pSCR_array[namberNext]->Start(namberNext , pMsgStructSCR->symbol , pMsgStructSCR->enumerateData );  // передаем номер экземпляра который будет транслировать данные // можно еще добавить сюда како последний message пришел в этот экземпляр 
                countScreener++;                                                   // прибавляем в счетчик новый экземпляр  
                                  
    }
}
Добавлено через 26 секунд
итог

Ошибка 1 error C2061: синтаксическая ошибка: идентификатор "MessageStruct" c:\users\андрей\documents\visual studio 2012\projects\lightspeedtrader\samples\vs2010\основной проект ls\lightspeedtraderapi_50\lightspeedtraderapidemo\MainClass.h 41 1 LightspeedTraderAPIDemo

Добавлено через 1 минуту
Цитата Сообщение от Tulosba Посмотреть сообщение
если преобразование из void* в нужный тип работает, то вероятно в хедере достаточно сделать предварительное объявления типа:
C++
1
struct MessageStruct;
пробовал не получилось целая куча ошибок выскочила
Nullik
 Аватар для Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 297
Завершенные тесты: 1
25.01.2014, 12:24     ошибка 2061 #9
почему виртуальный деструктор в MainClass, если там нет виртуальных методов?
DU
1479 / 1055 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
25.01.2014, 12:28     ошибка 2061 #10
зачем в первом инклуде (я так понял это Message.h) у вас инклудится MainClass.h (строка 3)? Он там не используется и его там не надо. Попробуйте убрать. А то у вас цикл получается:
MainClass.h инклудит Message.h, а Message.h инклудит MainClass.h.

Если это не поможет то сюда запостите весь список ошибок с полным их описанием.
aae1
2 / 2 / 0
Регистрация: 05.01.2013
Сообщений: 69
25.01.2014, 12:31  [ТС]     ошибка 2061 #11
Цитата Сообщение от Nullik Посмотреть сообщение
почему виртуальный деструктор в MainClass, если там нет виртуальных методов?
поправил убрал пока ,они будут

но это не решает проблему

Добавлено через 1 минуту
Цитата Сообщение от DU Посмотреть сообщение
зачем в первом инклуде (я так понял это Message.h) у вас инклудится MainClass.h (строка 3)? Он там не используется и его там не надо. Попробуйте убрать. А то у вас цикл получается:
MainClass.h инклудит Message.h, а Message.h инклудит MainClass.h.

Если это не поможет то сюда запостите весь список ошибок с полным их описанием.
нужен потому что я в Message.cpp создаю обьект MainClass
DU
1479 / 1055 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
25.01.2014, 12:32     ошибка 2061 #12
пробовал не получилось целая куча ошибок выскочила
это не значит что не получилось, пока неизвестны ошибки.
может оказаться так, что с2061 вы этим исправили и пошли выдаваться следующие ошибки, которые
компилятор не мог обнаружить из-за предыдущей.

Добавлено через 34 секунды
он используется в Message.cpp - значит туда и надо инклуд добавлять. а не в h файл
aae1
2 / 2 / 0
Регистрация: 05.01.2013
Сообщений: 69
25.01.2014, 12:36  [ТС]     ошибка 2061 #13
убрал из хедера Message.h #include "MainClass.h"

и вставил Message.cpp ошибка пропала !!! ,
почему? , какие правила подключения хедеров? я просто в основном на C# пишу , но тут пришлось немножко на с++ , что то не догоняю этот момент
DU
1479 / 1055 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
25.01.2014, 12:38     ошибка 2061 #14
А то у вас цикл получается:
MainClass.h инклудит Message.h, а Message.h инклудит MainClass.h, который инклудит Message.h ...
Если по простому - то подключать нужно только то, что нужно.
Как узнать то, что нужно: это уже немного дольше расписывать.
aae1
2 / 2 / 0
Регистрация: 05.01.2013
Сообщений: 69
25.01.2014, 12:42  [ТС]     ошибка 2061 #15
вопрос по преобразованию типов из void
C++
1
2
3
void MainClass::DeleteExampleSCR(void *MsgStructSCR)      // Метод удалит не нужный экземпляр Screener
{
     MessageStruct *pMsgStructSCR =(MessageStruct *)MsgStructSCR;
скажите много времени занимает ? , просто эта функция будет вызываться несколько тысяч раз в секунду

Добавлено через 1 минуту
Цитата Сообщение от DU Посмотреть сообщение
Если по простому - то подключать нужно только то, что нужно.
Как узнать то, что нужно: это уже немного дольше расписывать.
может чуточку распишем?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2014, 12:54     ошибка 2061
Еще ссылки по теме:

Ошибка в коде (Ошибка сегментирования (core dumped) C++
При компиляции ошибка. Ошибка c++ C2678 C++
типизированный файл, ошибка ошибка при выходе C++
С++ ошибка в проге, но не могу понять какая ошибка( C++
C++ Выдает: Ошибка C2296 Ошибка C2106

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
DU
1479 / 1055 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
25.01.2014, 12:54     ошибка 2061 #16
это не функция. это создание временной переменной типа указатель на MessageStruct.
Время мизерное. Да и рано вам об этом париться. Когда проседание производительности
будет заметно, тогда и стоит чесаться. Но это не повод оставлять такой код. С типами
код понятнее а значит меньше шансов допустить ошибку.

Добавлено через 10 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// это некий b.h файл:
 
class C; // форворд декларация.
 
class B : public A // при наследовании от A в b.h нужно заинклудить A.h
{
  A m_a; // Если используются объекты (не указатели и не ссылки), то нужно заинклудить A.h
 
  // Для ссылок и указателей, если не создаются их инстансы, нет обращения  
  // к методам\мемберам - достаточно ворворд декларации.
  void MethodWithCPtr(C* cPtr);
  C* MethodWithCPtr();
  void MethodWithCRef(C& cRef);
  C& MethodWithCRef();
  С* m_cPtr;
  C& m_cRef;
 
 
   void MethodWithDPtr(D* dPtr) // метод заимплеменчен в h файле.
   {
       // вызов метода. для этого нужно все знать о типе D, т.е. нужен инклуд.
       // В случае ссылок - тоже самое.
       dPtr->method();
   }
 
   E Foo2(); // Возврат по значению. Не уверен, но вроде достаточно форворд декларации E.
   void Foo2(G g); // Параметр по значению. Не уверен, но вроде достаточно форворд декларации G.
};
Yandex
Объявления
25.01.2014, 12:54     ошибка 2061
Ответ Создать тему
Опции темы

Текущее время: 14:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru