C++,Visual Studio 2012和错误4700,用于简单程序中的类变量
C++, Visual Studio 2012 and Error 4700 for class variables in a simple program
我有一个简单的代码示例,我不知道为什么我在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 );
};
相关文章:
- 显示错误输出的简单数组排序程序
- 简单C++"Hello World"程序的执行时间长
- 而循环:简单的除法程序输出零,不明白为什么
- 为什么一个简单的程序不能立即启动
- 使用简单两相锁定的并发程序
- [[可能]]和[[不太可能]]影响程序汇编的简单示例?
- GDB 8.1 无法在单线程简单程序中跟踪 std::string 变量的值
- 多线程 gtkmm 应用程序最简单的示例
- 我写了一个简单的矢量程序,在其中我得到了以下输出。你能帮我理解它的输出吗?
- 如何使用cmake和Visual Studio 2019编译简单的Windows应用程序?
- 试图解决这个简单的C++程序,但我被困在某个地方
- 我已经安装了用于c++编程的升华3,但在编写了一个简单的程序后,我遇到了以下错误
- 无法编译简单的C++17程序
- 如何设置一个简单的CGAL+Qt程序
- Cmake无法在qt-creater/collect2上编译简单的测试程序:错误:ld
- 令牌之前的简单程序预期标识符'('
- 使用Cmake进行简单的CUDA程序
- 我创建了一个简单的程序,但有些地方不对劲
- 编译简单的多文件类程序时出现未定义的引用错误
- 程序简单,没有调用堆栈,"inpossible"查找错误