【发布时间】:2010-05-01 15:27:27
【问题描述】:
我在A.cpp 中有一个主函数,它有以下相关的两行代码:
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() 时,我的结构的内容会正确打印到标准输出。但是,当我从 A.cpp 调用 definition.Print() 时,我的结构是空的或包含垃圾。谁能推荐初始化/传递我的结构的正确方法,以便我可以在函数定义范围之外访问它们?
谢谢。
【问题讨论】:
-
无论您的代码中哪里有 char *,您都应该真正考虑使用 std::string - 特别是对于地图。