我显然做错了什么或遗忘了什么。我在头文件中定义了一个带有四个变量的结构。然后我将值分配给位于不同.cpp的函数中的那些变量,然后我尝试从结构中获取新值并将其分配给另一个函数中的不同变量。问题是,我能够为结构中的变量赋值,但是当我尝试将这些值传递给其他变量时,它们变成类似于-858993460(这是根据调试器并观察线程)。 我该如何解决这个问题?
结构定义了它的功能(尽管当前没有使用它)
struct Setting {
int Max;
int Min;
int Sample;
int Points;
} Set1, Set2;
**为结构变量分配值**
void Settings::OnBnClickSet() {
GetDlgItemText(ID_Points,str4);
CW2A buf3((LPCWSTR)str4);
Serial Value;
Value.Set1.Points = atoi(buf3);
}
尝试将这些值转移到另一个变量
bool Serial::Temperature(CString) {
int Max,Min,SampleTime,Points;
Max = Set1.Max;
Min = Set1.Min;
SampleTime = Set1.Sample;
Points = Set1.Points;
}
答案 0 :(得分:2)
您正在设置本地(自动)变量的值。这些更改是声明变量的函数的本地变量(OnBnClickSet()
)。
如果要使用Serial
的单个实例,则需要将其传递给OnBnclickSet()
函数,或通过其他方式使用它(使用全局变量或单例)例如)。
void Settings::OnBnClickSet() {
GetDlgItemText(ID_Points,str4);
CW2A buf3((LPCWSTR)str4);
// This creates a Serial object with automatic storage duration
Serial Value;
// You're setting the value on the local (automatic) variable.
Value.Set1.Points = atoi(buf3);
// Value will now go out of scope, all changes to it were
// local to this function
}
bool Serial::Temperature(CString) {
int Max,Min,SampleTime,Points;
// The member (?) variable Set1 was never modified on this instance of `Serial`
Max = Set1.Max;
Min = Set1.Min;
SampleTime = Set1.Sample;
Points = Set1.Points;
}
答案 1 :(得分:2)
但是当我尝试将这些值转移到其他变量时,它们变成类似于-858993460
的东西
这是一个魔术数字。将其转换为十六进制以获得0xcccccccc。使用Debug配置设置构建程序时,用于初始化变量的值是什么。
所以无论何时你在调试器中看到它,你都会去“啊!我正在使用一个未初始化的变量!”我们从片段中真正看到的是你的Set1结构从未被初始化。专注于应该执行此操作的代码,具有非零赔率,您只是忘记编写该代码或使用错误的结构对象。