Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > extern + array


Автор: Alca 8.6.2010, 10:36
Использую C++Builder 2010:
Test.cpp
Код

const char g_archEmptyDbContent[] = {
#include "Db.empty.zip.txt"
};


Unit1.cpp
Код

extern const char  g_archEmptyDbContent[];
//...
CxFile flDB;
flDB.bCreate();
//BOOL bWrite(LPCVOID pcvBuf, ULONG ulCount);
flDB.bWrite(&g_archEmptyDbContent[0], sizeof(g_archEmptyDbContent) / sizeof(g_archEmptyDbContent[0]);
flDB.bClose();


Ругается на sizeof(g_archEmptyDbContent):
Код

[BCC32 Error] Unit1.cpp(743): E2109 Not an allowed type


Добавлено через 14 минут и 41 секунду
Необходимо узнать размер массива в другом модуле.

Автор: jonie 8.6.2010, 11:22
Alca, отдельную int переменную сделайте "размер" ее и extern-ните

Автор: Dem_max 8.6.2010, 11:25
с extern и const вместе не получается

Автор: Alca 8.6.2010, 12:21
Сделал так:

GlobalVars.h

Код

extern CHAR   g_archEmptyDbContent[];
extern ULONG  g_ulEmptyDbContentSize;


GlobalVars.cpp
Код

#include <vcl.h>

//---------------------------------------------------------------------------
char  g_archEmptyDbContent[] = {
#include "Db.empty.zip.txt"
};
ULONG  g_ulEmptyDbContentSize = xARRAY_SIZE(g_archEmptyDbContent);
//---------------------------------------------------------------------------


Использование:
Код

#include "GlobalVars.h"

CxFile flEmptyDB;
flEmptyDB.bCreate();
flEmptyDB.bWrite(&g_archEmptyDbContent[0], g_ulEmptyDbContentSize);
flEmptyDB.bClose();


jonie, Dem_max, спасибо.

Автор: mes 9.6.2010, 10:21
Цитата(Dem_max @  8.6.2010,  10:25 Найти цитируемый пост)
с extern и const вместе не получается

правда ?!  smile 
 smile 

Автор: Alca 9.6.2010, 10:34
Цитата

правда ?! 

Сделал const:
Код

[ILINK32 Error] Error: Unresolved external '_g_ulEmptyDbContentSize' referenced from D:\MY\MYPROJECTS\BC++\PROJECTS\XXXDB\PROJECT\DEBUG\ULOGON.OBJ
[ILINK32 Error] Error: Unresolved external '_g_archEmptyDbContent' referenced from D:\MY\MYPROJECTS\BC++\PROJECTS\XXXDB\PROJECT\DEBUG\ULOGON.OBJ


GlobalVars.h
Код

extern const CHAR   g_archEmptyDbContent[];
extern const ULONG  g_ulEmptyDbContentSize;


GlobalVars.cpp
Код

const char  g_archEmptyDbContent[] = {
#include "Units\XXXDb.empty.zip.txt"
};
const ULONG  g_ulEmptyDbContentSize = xARRAY_SIZE(g_archEmptyDbContent);


uLogon.cpp
Код

#include "GlobalVars.h"
...


Добавлено через 3 минуты и 48 секунд
Убрал const в cpp-шнике - скомпилилось

Добавлено через 4 минуты и 24 секунды
GlobalVars.cpp
Код

/*const*/ char  g_archEmptyDbContent[] = {
#include "Units\XXXDb.empty.zip.txt"
};
/*const*/ ULONG  g_ulEmptyDbContentSize = xARRAY_SIZE(g_archEmptyDbContent);


Добавлено через 5 минут и 21 секунду
ха-ха  smile 

Автор: mes 9.6.2010, 10:54
Цитата(Alca @  9.6.2010,  09:34 Найти цитируемый пост)
ха-ха  smile 

константы по умолчанию не "расшарены", поэтому при определении внешней константы обязательно использовать модификатор extern.

Код

extern const char  g_archEmptyDbContent[] = {
#include "Units\XXXDb.empty.zip.txt"
};
extern const ULONG  g_ulEmptyDbContentSize = xARRAY_SIZE(g_archEmptyDbContent);

smile

Автор: Alca 9.6.2010, 11:13
mes, спасибо, буду знать

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