c++ - 初始化列表没有合适的默认构造函数可用错误

标签 c++ visual-c++ inheritance constructor initializer-list

出于某种原因,即使我使用的是成员初始值设定项,我也会收到无默认构造函数错误。我做错了什么?

一个最小的例子,

a.cpp

#include "a.h"


a::a(int x, int y, int z):x(x),y(y),z(z)
{
}

啊啊

class a
{
public:
    a(int x, int y, int z);

private:
    int x, y, z;
};

b.cpp

#include "b.h"


b::b()
    :ao(1,2,3)
{
}

b.h

#include "a.h"

class b: public a
{
public:
    b();

private:
    a ao;
};

最佳答案

你的 b有两个a其中的对象:一个叫做ao and 是一个成员变量,另一个是b是继承自。您已经在初始化 ao显式在初始化列表中,但您没有初始化 b的 parent 。您可以通过插入 a(4,5,6), 来完成此操作在 ao(1,2,3) 之前的初始化列表中.

关于c++ - 初始化列表没有合适的默认构造函数可用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28838134/

相关文章:

c# - 用 C# 等效项替换由 CreateDispatch 调用调用的 VB6 DLL

c++ - Win XP x64 上的段错误在 XP x32 上不会发生 - strncpy 问题?怎么修?

c++ - 内部类、pimpl 和一个 friend 类——不同意的编译器

c++ - 将数组拆分为多个数组c++

c++ - Variadic 模板元编程 : a bug in clang++ or g++?

javascript - “Private” Javascript 中的属性继承

objective-c - 调用继承的方法会导致警告而不转换为父类(super class)

c++ - Qt/SQL - 从 QSqlQuery exec 存储过程获取列类型和名称?

visual-studio-2008 - 使用 VC++ 2008 为 XP 构建屏幕保护程序

c++ - 如何对抽象类对象进行排序