结构上没有合适的默认构造函数
No appropriate default constructor available on struct
>免责声明:我已经查看了这种情况可能熟悉的其他问题,但是我没有找到解决方案
情况:我正在尝试创建类型为Levelnode(结构)的链表。 创建新节点后,它应该创建一个新级别(级别类)。
问题:我在第 18 行(.cpp文件,而不是头文件)收到错误,内容为 -
Error 2 error C2512: 'Levelnode' : no appropriate default constructor available c:userstimidesktopludum dareld27nodes.cpp 18 1 LD27
我在头文件中确实有一个默认构造函数,所以我真的不明白为什么会发生此错误。
下面是 Nodes.h 头文件:
#ifndef NODES_H
#define NODES_H
#include <iostream>
#include <string>
#include "structs.h"
#include "Level.h"
using namespace std;
class Nodes
{
private:
Levelnode * p;
Level * level;
public:
Nodes()
{
}
~Nodes();
Levelnode * CreateNode(Level * newLevel, SDL_Surface *screen1, string levelName, SDL_Rect camera1);
void InsertAfter(Levelnode * p, Levelnode * newNode);
Levelnode * InsertFirst(Levelnode * p, Levelnode * newNode);
void DeleteNode(Levelnode * p);
void PrintList(Levelnode * p);
};
#endif
这是.cpp文件:
#include <Windows.h>
#include <iostream>
#include <string>
#include "Nodes.h"
#include "structs.h"
#include "Level.h"
Nodes::~Nodes()
{
}
Levelnode * Nodes::CreateNode(Level * newLevel, SDL_Surface *screen1, string levelName, SDL_Rect camera1)
{
Levelnode * newNode;
newNode = new Levelnode;
level = new Level(screen1, levelName, camera1);
level->draw();
newNode->L = *newLevel;
newNode->next = NULL;
return newNode;
}
void Nodes::InsertAfter(Levelnode * p, Levelnode * newNode)
{
newNode->next = p->next;
p->next = newNode;
}
Levelnode * Nodes::InsertFirst(Levelnode * p, Levelnode * newNode)
{
newNode->next = p;
return newNode;
}
void Nodes::DeleteNode(Levelnode * p)
{
Levelnode * pTemp;
while ( p != NULL)
{
pTemp = p;
p = p->next;
delete pTemp;
}
}
void Nodes::PrintList(Levelnode * p)
{
while (p != NULL)
{
p->L.draw();
p = p->next;
}
}
结构头文件:
#ifndef STRUCTS_H
#define STRUCTS_H
#include <Windows.h>
#include <string>
#include "Level.h"
using namespace std;
struct position
{
int x;
int y;
};
struct Levelnode
{
Level L;
Levelnode * next;
};
#endif
最可能的原因是,由于您的Levelnode
结构:
struct Levelnode
{
Level L;
Levelnode * next;
};
具有 Level
成员,并且缺少默认 ctor,Level
编译器生成的 Levelnode
的默认 ctor 无法初始化 Levelnode::L 成员。结果是编译器实际上根本没有生成默认的Levelnode
ctor。如果您尝试创建Levelnode
:
Levelnode node;
您将收到有关Levelnode
没有默认 CTOR 的错误。
您需要为Levelnode
提供自己的默认 ctor,应该使用适当的 L
ctor 初始化 Levelnode::L。喜欢:
struct Levelnode
{
Level L;
Levelnode * next;
Levelnode()
: L(ctor arguments)
{ }
};
另一种解决方案是为Level
提供一个默认的 ctor,如果这对该类有意义的话。
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 初始化具有非默认构造函数的std::数组项的更好方法
- 具有默认模板类型的默认构造函数的类型推导
- 如何使用非默认构造函数实例化模板化类
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 声明没有默认构造函数的字段
- 没有默认构造函数作为模板参数的自定义比较器
- C++17 没有默认构造函数的地图放置(私有默认构造函数)
- 使用移动调用对等构造函数unique_ptr默认构造函数
- C++复制构造函数和默认构造函数
- 将向量从 N1 缩小到 N2 项,而不触发默认构造函数并仅使用 move 语义
- 为什么即使我调用参数化构造函数也会调用默认构造函数?
- 具有非默认构造函数的单例类
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- 如何处理没有默认构造函数但在另一个构造函数中构造的对象?
- 在C++中使用默认构造函数初始化对象的不同方法
- 在没有默认构造函数的情况下创建的派生对象
- 强制使用默认构造函数对成员进行未初始化的声明
- 使用默认构造函数初始化对象的不同方法
- 创建类类型的动态分配数组,其中类不得具有默认构造函数