0

我显然做错了什么或忘记了什么。我在带有四个变量的头文件中定义了一个结构。然后,我将值分配给位于不同 .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;
}
4

2 回答 2

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;
}
于 2013-02-12T21:08:20.570 回答
2

但是当我尝试将这些值转移到其他变量时,它们会变成 -858993460

那是一个神奇的数字。将其转换为十六进制得到 0xcccccccc。当您使用调试配置设置构建程序时,这是用于初始化变量的值。

所以每当你在调试器中看到它时,你会说“啊!我正在使用一个未初始化的变量!” 我们可以从代码片段中真正看到的是您的 Set1 结构从未被初始化。专注于应该执行此操作的代码,您刚刚忘记编写该代码或使用错误的结构对象的可能性不为零。

于 2013-02-12T21:09:04.100 回答