我在A.cpp
有一个主要的功能,其具有下面的代码相关的两行:C++函数范围
B definition(input_file);
definition.Print();
在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;
}
在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
}
因此,当我从B::ParseLSFile(...)
中调用Print()
时,那么我的结构的内容将正确打印到stdout。但是,当我从A.cpp中调用definition.Print()
时,我的结构是空的或包含垃圾。任何人都可以推荐正确的方式来初始化/传递我的结构,以便我可以在我的函数定义范围之外访问它们吗?
谢谢。
无论在你的代码中你有char *,你都应该考虑使用std :: string - 特别是对于地图。 – 2010-05-01 15:30:55