结构中的C ++ Struct +删除了函数错误

时间:2016-07-20 03:47:12

标签: c++

我在一个项目中有一个头文件,我声明了许多结构。后面的一些结构具有成员,这些成员是先前声明的结构的类型。我知道这些成员结构必须在使用之前声明,但我遇到了奇怪的行为。

在下面的文件中,我尝试将新成员添加到(LUT)类型的第二个结构Coordinate。你可以看到底层结构libraryEntry有一个类似的成员;这种情况已经存在了一段时间,并没有造成任何问题。

#ifndef STRUCTS_H
#define STRUCTS_H
#pragma once
#include <string>
#include "Enums.h"

struct Coordinate {
    int X;
    int Y;
    Coordinate(int x, int y) : X(x), Y(y) {}
};
struct LUT {
    int offset;
    std::string hexCode;
    bool modifiedByTrojan;
    //Coordinate xyCoordinate; <======= Causes build to fail when uncommented
};
struct libraryEntry {
    int id;
    DeviceType deviceType;
    int offSet;
    Coordinate xyCoordinate;
    std::string hexCode;
    DeviceConfiguration deviceConfig;
    libraryEntry(int idNum, DeviceType deviceType, int offSet, Coordinate xyCoordinate, std::string hexCode) :
        id(idNum),
        deviceType(deviceType),
        offSet(offSet),
        xyCoordinate(xyCoordinate),
        hexCode(hexCode)
    {

    }
};
#endif

添加上面的坐标成员会导致错误:

'LUT::LUT(void)':attempting to refernce a deleted function

为什么这只发生在第二个结构中?

1 个答案:

答案 0 :(得分:4)

在有效的结构(libraryEntry)中,您已经定义了一个构造函数,并且在构造函数中使用其两个arg构造函数初始化xyCoordinate

在无法编译的结构中,您尚未定义任何构造函数,因此您将获得默认的no-arg构造函数,该构造函数使用其默认值(no-arg)初始化所有内容,包括Coordinate成员构造函数。 Coordinate没有默认构造函数,因为您声明了一个不同的构造函数,导致默认构造函数被删除,因此您的错误消息。