У меня есть основную функцию в A.cpp
, который имеет следующие соответствующие две строки кода:C++ область видимости функции
B definition(input_file);
definition.Print();
In B.h
у меня есть следующие соответствующие строки кода:
class B
{
public:
// Constructors
B(void);
B(const char *filename);
~B(void);
// File input
int ParseLSFile(const char *filename);
// Debugging
void Print(void);
// Data
int var1;
double var2;
vector<char* > var3;
map<char*, vector<char* > > var4;
}
In B.cpp
, У меня есть следующие сигнатуры функций (извините за избыточность):
B::B(void)
: var1(-1),
var2(numeric_limits<double>::infinity())
{
}
B::B(const char *filename)
{
B *def = new B();
def->ParseLSFile(filename);
}
B::~B(void)
{
// Free memory for var3 and var 4
}
int B::ParseLSFile(const char *filename)
{
// assign var1, var2, var3, and var4 values
}
void B::Print(void)
{
// print contents of var1, var2, var3, and var4 to stdout
}
Поэтому, когда я вызываю Print()
с B::ParseLSFile(...)
, содержимое моих структур правильно печатается в стандартный вывод. Однако, когда я вызываю definition.Print()
из A.cpp, мои структуры пусты или содержат мусор. Может ли кто-нибудь рекомендовать правильный способ инициализации/передачи моих структур, чтобы я мог получить к ним доступ за пределами области определения моей функции?
Спасибо.
Везде, где в вашем коде есть символ char *, вы должны действительно рассмотреть использование std :: string - особенно для карты. – 2010-05-01 15:30:55