2 / 2 / 0
Регистрация: 05.01.2013
Сообщений: 69
1

ошибка 2061

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

Author24 — интернет-сервис помощи студентам
Вопрос к знатокам почему если передаю структуру вот так вот в метод
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;
     }

Вот так вот и в констуктор приходиться передавать иначе таже самая ошибка , а потом только внутри метода приводить к нужному типу , насколько важно это по скорости !!!!?????? , мне нужна скорость !!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.01.2014, 00:57
Ответы с готовыми решениями:

Костя выписал на доску 30 последовательных членов арифметической прогрессии с разностью 2061. Докажите, что в
Костя выписал на доску 30 последовательных членов арифметической прогрессии с разностью 2061....

IIS- asp ошибка: HTTP 500.100 - Внутренняя ошибка сервера - ошибка ASP Internet Information Services
Привет! Конфигурация win2000pro sp2, стандартный IIS, IE 5. При попытке обратиться к...

Ошибка при чтении изменений при обмене РИБ: Ошибка при вызове метода контекста (ПрочитатьИзменения): Ошибка записи!
Доброго всем времени суток! подскажи пожалуйста как исправить ошибку: Ошибка при чтении изменений...

Ошибка при добавлении в файл. Ошибка 101: Ошибка записи на диск (Error 101: Disk write error).
Здравствуйте, возникла проблема такого плана. Нужно произвести добавление записи в файл, но после...

15
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.01.2014, 01:27 2
Цитата Сообщение от aae1 Посмотреть сообщение
то возникает ошибка синтаксиса 2061
Компилятор показывает где?
0
2 / 2 / 0
Регистрация: 05.01.2013
Сообщений: 69
25.01.2014, 01:36  [ТС] 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);
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.01.2014, 01:48 4
Цитата Сообщение от aae1 Посмотреть сообщение
показывает в хедере где обьявлен метод
void MainClass::CreateNewExampleSCR(MessageStruct* pMsgStructSCR);
Подчёркивает что-то? В подсказке, что пишет?
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
25.01.2014, 01:55 5
DEl

Добавлено через 5 минут
А Где объявлена структура messаgеStruct?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.01.2014, 02:10 6
Цитата Сообщение от aae1 Посмотреть сообщение
показывает в хедере где обьявлен метод
aae1, MessageStruct в этом хедере видна?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
25.01.2014, 11:01 7
если преобразование из void* в нужный тип работает, то вероятно в хедере достаточно сделать предварительное объявления типа:
C++
1
struct MessageStruct;
0
2 / 2 / 0
Регистрация: 05.01.2013
Сообщений: 69
25.01.2014, 12:22  [ТС] 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;
пробовал не получилось целая куча ошибок выскочила
0
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302
25.01.2014, 12:24 9
почему виртуальный деструктор в MainClass, если там нет виртуальных методов?
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
25.01.2014, 12:28 10
зачем в первом инклуде (я так понял это Message.h) у вас инклудится MainClass.h (строка 3)? Он там не используется и его там не надо. Попробуйте убрать. А то у вас цикл получается:
MainClass.h инклудит Message.h, а Message.h инклудит MainClass.h.

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

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

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

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от DU Посмотреть сообщение
Если по простому - то подключать нужно только то, что нужно.
Как узнать то, что нужно: это уже немного дольше расписывать.
может чуточку распишем?
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
25.01.2014, 12:54 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.
};
1
25.01.2014, 12:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.01.2014, 12:54
Помогаю со студенческими работами здесь

Ошибка SQL запроса , в базе работает, а через IBQuery в Delphi ошибка
В Combobox загружены имена организаций. Нужно выполнить запрос на вывод всех полей таблицы...

Ошибка CL.exe завершилась с кодом 2 Что это за ошибка и как исправить?
Ошибка появилась, но не могу понять как ее исправить. #include &lt;iostream&gt; using namespace...

Django Ошибка доступа (403) Ошибка проверки CSRF. Запрос отклонён
На хостинге разместил сайт и не могу войти в админку, т.к. возникает 403 ошибка &quot;Ошибка доступа...

ASP: Response.Redirect - не работает, ошибка `500 - Внутренняя ошибка сервера'
Всем привет! Есть в ASP-сраничке такой код: Response.Redirect 'page1.asp?ReturnTo=page2.asp' ...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru