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

Ошибка при передаче структуры - C++

Восстановить пароль Регистрация
 
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
13.01.2011, 06:57     Ошибка при передаче структуры #1
Пишу в тему для начинающих, ибо жестко туплю с данным вопросом.

Есть метод:

C++
1
2
3
4
Fuse_Interpretate::clearStruct(PS)//!!!!!!!!!!!!
{
    PS.N = 0;
}
Его объявление:

C++
1
2
3
4
5
6
7
8
9
class Fuse_Interpretate
{ 
private:
somevars blablabla;
 
public:
    PacketSet PS, *PckSt;
    void clearStruct(PacketSet PS);
}
Его вызов в программе:
C++
1
2
3
4
int Initialise(string &flow)
{
clearStruct(PS);
}
для структуры:
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
#pragma once
#define __int64 long long int
#define __int8 char
#define __int32 int
 
struct PacketData
{
    unsigned short Level2Proto; 
    __int64 Level2AddrSrc; 
    unsigned __int64 Level2AddrDst;
    unsigned short Level2CRC;
    unsigned __int8 Level3Proto; 
    unsigned __int32 Level3AddrSrc;
    unsigned __int32 Level3AddrDst;
    unsigned short Level3CRC;
    unsigned short Level3Len;
    unsigned __int8 Level4Proto; 
    unsigned __int32 Level4PortSrc;
    unsigned __int32 Level4PortDst;
    unsigned short Level4CRC;
    __int32 timeSec; 
    __int32 timeUsec;
};
struct PacketSet
{
    __int64 N; //Количество пакетов
    double StartTime;
    double Entropy;
    PacketData Packet[50000];
};
g++ выкидывает ошибку: expected constructor, destructor, or type conversion before '(' token на строке "Fuse_Interpretate::clearStruct(PS)"( с "//!!!!!!!!!!!!" пометкой). Прошу помощи, ибо схожая конструкция на MSVC 8\10 компилируется и работает, а на FreeBSD как то 2й день не могу понять в чем причина. Был вариант неправильной передачи (по ссылке как вариант), но суть ошибки не меняется, она остается в любом случае
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
13.01.2011, 07:22     Ошибка при передаче структуры #2
Цитата Сообщение от zulkis Посмотреть сообщение
void clearStruct(PacketSet PS);
Ты числишь параметр? Тогда его надо передать или по указателю, или по ссылке. Обрати внимание:
Цитата Сообщение от zulkis Посмотреть сообщение
PacketSet PS, *PckSt; void clearStruct(PacketSet PS);
. Чем различается их назначение? Причём, и тип один.

Цитата Сообщение от zulkis Посмотреть сообщение
clearStruct(PS);
Ну и ну, к членам класса ты обращаешься непосредственно! А где объект, которому они принадлежат?

Цитата Сообщение от zulkis Посмотреть сообщение
для структуры:
#pragma once
#define __int64 long long int
#define __int8 char
#define __int32 int
struct PacketData
{
unsigned short Level2Proto;
__int64 Level2AddrSrc;
unsigned __int64 Level2AddrDst;
unsigned short Level2CRC;
unsigned __int8 Level3Proto;
unsigned __int32 Level3AddrSrc;
unsigned __int32 Level3AddrDst;
unsigned short Level3CRC;
unsigned short Level3Len;
unsigned __int8 Level4Proto;
unsigned __int32 Level4PortSrc;
unsigned __int32 Level4PortDst;
unsigned short Level4CRC;
__int32 timeSec;
__int32 timeUsec;
};
struct PacketSet
{
__int64 N; //Количество пакетов
double StartTime;
double Entropy;
PacketData Packet[50000];
};
g++ выкидывает ошибку: expected constructor, destructor, or type conversion before '(' token на строке "Fuse_Interpretate::clearStruct(PS)"
В структурах такой строки нет, а там, где есть, она к ним не относится.

Добавлено через 1 минуту
Цитата Сообщение от zulkis Посмотреть сообщение
Прошу помощи, ибо схожая конструкция на MSVC 8\10 компилируется и работает
Компилы телепатией не страдают, так что быть такого не может. А если та конструкция отличается, то смотри, чем.
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
13.01.2011, 07:34  [ТС]     Ошибка при передаче структуры #3
Ну и ну, к членам класса ты обращаешься непосредственно! А где объект, которому они принадлежат?
Они в одном классе, почему бы и нет ?

В структурах такой строки нет, а там, где есть, она к ним не относится.
Ошибка именно в строке Fuse_Interpretate::clearStruct(PS){}

Чем различается их назначение? Причём, и тип один.
Да, один... собственно структуры моей. Изначально я структуру обнуляю, а затем начинаю её заполнять из множества разных классов\динамических библиотек. А проблема встала в самом начале при обнулении. Эммм эврика? Скомпилировалась, это же внутренний метод класса, зачем туда чтото передавать... Но теперь старое доброе Segmentation fault :\ А у меня дебагер не ставится ;(
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
13.01.2011, 08:20     Ошибка при передаче структуры #4
Цитата Сообщение от zulkis Посмотреть сообщение
Они в одном классе, почему бы и нет ?
Да. А обращаешься ты к ним из метода этого класса? Нет? Тогда укажи, для какого именно объекта этого класса ты к ним хочешь обратиться.

Добавлено через 26 секунд
Цитата Сообщение от zulkis Посмотреть сообщение
Ошибка именно в строке Fuse_Interpretate::clearStruct(PS)
Да. Но к структурам она не относится.

Добавлено через 5 минут
Цитата Сообщение от zulkis Посмотреть сообщение
Изначально я структуру обнуляю, а затем начинаю её заполнять из множества разных классов\динамических библиотек.
Тогда обнулять должен конструктор. Все операции, обязательные при создании объекта, должен выполнить конструктор. Метод же нужен для принудительного сброса уже заполненного объекта. Как вариант, конструктор может сбросить объект методом (я всегда сам так делаю), но если сброс объекта обязателен, то выполнить его должен конструктор. Это гарантирует от ошибок несброса.
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
13.01.2011, 08:49  [ТС]     Ошибка при передаче структуры #5
Обращаюсь из метода этого же класса, насчет ошибки да, к структурам она не относится, вынес только изза того, что они входят в проблему в целом.

т.е. логично:
Fuse_Interpretate::Fuse_Interpretate()
{
PS.N=0;
//и прочие обнуления тут
}
ну и в хедере поправить...
Fuse_Interpretate(void);
~Fuse_Interpretate(void);

Все равно Segmentation Fault

я так понимаю эта ошибка появляется при обращении в неправильную область памяти(memory access violation)

просто у меня структурЫ в структуре и изза этого могут происходить несуразности, переполнения, и тд, ибо у меня этих структур не одна и не две а минимум 10000, сейчас работает на 50000 уже.
Подумываю может выделить как то память динамически при создании? Тогда если честно не особо понимаю как эту структуру написать, то есть у меня четко указано количество структур PacketData - 50000, как их тогда определить, чтобы в том же конструкторе выделить память под нужное количество?
Yandex
Объявления
13.01.2011, 08:49     Ошибка при передаче структуры
Ответ Создать тему
Опции темы

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