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

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

Войти
Регистрация
Восстановить пароль
 
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
#1

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

13.01.2011, 06:57. Просмотров 536. Ответов 4
Метки нет (Все метки)

Пишу в тему для начинающих, ибо жестко туплю с данным вопросом.

Есть метод:

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й день не могу понять в чем причина. Был вариант неправильной передачи (по ссылке как вариант), но суть ошибки не меняется, она остается в любом случае
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2011, 06:57     Ошибка при передаче структуры
Посмотрите здесь:

Ошибка при объявлении структуры C++
C++ Может ли быть ошибка при передаче данных?
C++ Ошибка при передаче в скрытый параметр класса.
Ошибка при передаче двумерного массива в функцию C++
Ошибка при передаче двумерного массива в функцию std::thread C++
Ошибка при передаче результата функции C++
C++ Ошибка при передаче в функцию
Ошибка <unavailable synchronous data> при передаче переменной C++
Написать процедуру для суммирования матриц. Ошибка при передаче массива в функцию C++
C++ Ошибка при передаче двумерного массива в функцию
C++ ошибка в коде при идеальной передаче
C++ Ошибка при передаче параметра в функцию

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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     Ошибка при передаче структуры
Ответ Создать тему
Опции темы

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