C++,Visual Studio 2012和错误4700,用于简单程序中的类变量

C++, Visual Studio 2012 and Error 4700 for class variables in a simple program

本文关键字:程序 简单 类变量 用于 错误 Studio Visual 2012 C++ 4700      更新时间:2023-10-16

我有一个简单的代码示例,我不知道为什么我在Visual Studio 2012中收到错误4700?!?

error C4700: The uninitialized local variable "a" was used.
error C4700: The uninitialized local variable "b" was used.

代码为:

#include <iostream>
using namespace std;
class A
{
public:
    int x, y;
};

class B : public A
{
public:
    int z;
};
int main()
{
    cout<<" Using class A and Bn";
    A a;
    cout<<" x= "<<a.x<<"  y= "<<a.y<<"n";
    B b;
    cout<<" x= "<<b.x<<"  y= "<<b.y<<"  z= "<<b.z<<"n";
    cout<<"n End";
    getchar();
    return 0;
}

使用"A a;",对象变量"a"不仅应该被定义,而且应该被初始化,因为如果你没有显式地有一个构造函数,就会使用默认的标准构造函数,对吧?然后为什么我得到错误,"a"没有初始化?!?!?如果我为具有空实现的类 A 和 B 显式添加默认标准构造函数,则不会收到任何错误。这很好奇...唰唰��

使用默认构造函数数据定义本地对象时,不会初始化该对象的成员。所以它们有任意值,编译器会说这个。要对对象的数据成员进行零初始化,您可以编写

A a {};

A a = {};

至于B类,那么它不是一个聚合。因此,您应该编写自己的默认构造函数。

class B : public A
{
public:
    B() : A(), z( 0 ) {}
    int z;
};

另一种方法是在 lcass 定义中包含初始化。例如

class A
{
public:
    int x( 0 ), y( 0 );
};