Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Передача структуры как параметр функции


Автор: jhonyxakep 15.1.2010, 09:04
На самом деле вопрос достаточно глупый... 

Юзаю Total Commander авские wcx плагины. Экспорт функции - все как по маслу)

Существует функция OpenArchive (tOpenArchiveData *ArchiveData); где tOpenArchiveData описан как структура 

Код

typedef struct {
    char* ArcName;
    int OpenMode;
    int OpenResult;
    char* CmtBuf;
    int CmtBufSize;
    int CmtSize;
    int CmtState;
 } tOpenArchiveData;


создал подобную сруктуру

Код

struct OPENARC {
    char* ArcName ;
    int OpenMode;
    int OpenResult;
    char* CmtBuf;
    int CmtBufSize;
    int CmtSize;
    int CmtState;
 } ;



и передаю её как параметр функции
Код

OpenArchive(OPENARC);


в результате ошибка 

Цитата

expected primary-expression before ')' token


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

Автор: azesmcar 15.1.2010, 09:06
Цитата(jhonyxakep @  15.1.2010,  09:04 Найти цитируемый пост)
и передаю её как параметр функции

Код

void foo(int a) {
   // ...
}

foo(int); // чувствуется ошибка?


Цитата(jhonyxakep @  15.1.2010,  09:04 Найти цитируемый пост)
создал подобную сруктуру

а это уже другой вопрос, с чего ты взял что если код исправить он будет работать? Это разные структуры, не имеет значение что находиться внутри, с точки зрения компилятора они разные, он что их анализировать должен? И чем тебе не нравиться tOpenArchiveData?

Автор: artsb 15.1.2010, 09:35
azesmcar, уже всё сказал. А вы видать хотели так написать:
Код

struct {
    char* ArcName ;
    int OpenMode;
    int OpenResult;
    char* CmtBuf;
    int CmtBufSize;
    int CmtSize;
    int CmtState;
 }  OPENARC;

 smile 

И как сказал azesmcar, наврятли это прокатит, т.к. для компилера это разные структуры.

Автор: jhonyxakep 15.1.2010, 10:07
Цитата(artsb @  15.1.2010,  09:35 Найти цитируемый пост)
И как сказал azesmcar, наврятли это прокатит, т.к. для компилера это разные структуры.


Цитата(azesmcar @  15.1.2010,  09:06 Найти цитируемый пост)
а это уже другой вопрос, с чего ты взял что если код исправить он будет работать? Это разные структуры, не имеет значение что находиться внутри, с точки зрения компилятора они разные, он что их анализировать должен? И чем тебе не нравиться tOpenArchiveData?


smile Хорошо, и как тогда это надо делать?

Автор: azesmcar 15.1.2010, 10:09
Цитата(jhonyxakep @  15.1.2010,  10:07 Найти цитируемый пост)
smile Хорошо, и как тогда это надо делать? 

Что? использовать структуру tOpenArchiveData. Она тебе чем-то не нравиться? В крайнем случае можно применить cast.

Автор: jhonyxakep 15.1.2010, 10:10
Цитата(azesmcar @  15.1.2010,  10:09 Найти цитируемый пост)
Что? использовать структуру tOpenArchiveData. Она тебе чем-то не нравиться? В крайнем случае можно применить cast.


Всмысле вгонять данные прямо в tOpenArchiveData?

Автор: azesmcar 15.1.2010, 10:17
Цитата(jhonyxakep @  15.1.2010,  10:10 Найти цитируемый пост)
Всмысле вгонять данные прямо в tOpenArchiveData? 

представь себе да smile

Автор: jhonyxakep 15.1.2010, 10:20
Цитата(azesmcar @  15.1.2010,  10:17 Найти цитируемый пост)
представь себе да 

Как бы странно оно не звучало... но  smile  А то нифига не понять

Автор: artsb 15.1.2010, 10:29
Код

tOpenArchiveData aa;
// ...
OpenArchive(&aa);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)