C++ 结构上没有合适的默认构造函数
免责声明:我查看了其他可能熟悉这种情况的问题,但我没有找到解决方案 情况:我正在尝试创建Levelnode类型的链接列表(结构)。在创建新节点时,它应该创建一个新级别(级别类) 问题:我在第18行(是.cpp文件,不是头文件)收到一个错误,错误为- 我在头文件中有一个默认构造函数,所以我真的不明白为什么会发生这个错误 以下是Nodes.h头文件:C++ 结构上没有合适的默认构造函数,c++,constructor,default-constructor,C++,Constructor,Default Constructor,免责声明:我查看了其他可能熟悉这种情况的问题,但我没有找到解决方案 情况:我正在尝试创建Levelnode类型的链接列表(结构)。在创建新节点时,它应该创建一个新级别(级别类) 问题:我在第18行(是.cpp文件,不是头文件)收到一个错误,错误为- 我在头文件中有一个默认构造函数,所以我真的不明白为什么会发生这个错误 以下是Nodes.h头文件: #ifndef NODES_H #define NODES_H #include <iostream> #include <
#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
#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
\ifndef节点
#定义节点
#包括
#包括
#包括“structs.h”
#包括“h级”
使用名称空间std;
类节点
{
私人:
Levelnode*p;
级别*级别;
公众:
节点()
{
}
~Nodes();
Levelnode*CreateNode(Level*newLevel,SDL_Surface*screen1,字符串levelName,SDL_Rect camera1);
void InsertAfter(Levelnode*p,Levelnode*newNode);
Levelnode*InsertFirst(Levelnode*p,Levelnode*newNode);
void DeleteNode(Levelnode*p);
作废打印列表(Levelnode*p);
};
#恩迪夫
以下是.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;
}
}
#包括
#包括
#包括
#包括“Nodes.h”
#包括“structs.h”
#包括“h级”
节点::~Nodes()
{
}
Levelnode*Nodes::CreateNode(Level*newLevel,SDL_Surface*screen1,字符串levelName,SDL_Rect camera1)
{
Levelnode*newNode;
newNode=新的Levelnode;
级别=新级别(屏幕1,级别名称,摄像头1);
level->draw();
newNode->L=*newLevel;
newNode->next=NULL;
返回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;
返回newNode;
}
void节点::DeleteNode(Levelnode*p)
{
Levelnode*pTemp;
while(p!=NULL)
{
pTemp=p;
p=p->next;
删除pTemp;
}
}
void节点::打印列表(Levelnode*p)
{
while(p!=NULL)
{
p->L.draw();
p=p->next;
}
}
结构头文件:
#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
#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
\ifndef结构
#定义结构
#包括
#包括
#包括“h级”
使用名称空间std;
结构位置
{
int x;
int-y;
};
结构级别节点
{
L级;
Levelnode*next;
};
#恩迪夫
最可能的原因是,由于您的Levelnode
结构:
struct Levelnode
{
Level L;
Levelnode * next;
};
具有Level
成员,并且Level
缺少默认的ctor,编译器为Levelnode
生成的默认ctor无法初始化Levelnode::L成员。结果是编译器实际上根本不会生成默认的Levelnode
ctor。如果尝试创建Levelnode
:
Levelnode node;
您将得到一个关于Levelnode
没有默认ctor的错误
您需要为Levelnode
提供自己的默认ctor,该ctor应该使用适当的L
ctor初始化Levelnode::L。比如:
struct Levelnode
{
Level L;
Levelnode * next;
Levelnode()
: L(ctor arguments)
{ }
};
另一个解决方案是为
Level
提供一个默认的ctor,如果这对该类有意义的话。这意味着Levelnode
没有无参数构造函数。请包含Level.h的源代码,我猜它具有struct Levelnode的声明(否则,包括该头)struct的声明位于另一个名为structs.h的头文件中,我已将其包含在Nodes.h和Nodes.cpp中。对不起,我的意思是请向我们显示(现在)structs.h的源代码,而不是“#include”。很抱歉造成混淆。已添加structs.h的source:)wierd是,Levelnode是一个struct,而不是一个constructor@TimOgunmakin结构与类相同。唯一的区别是,它们的成员在默认情况下是公共的,而在类中它们是私有的。没有其他区别。如果您发布Levelnode结构,我们可能会更清楚地看到发生了什么。好的,谢谢,我现在在另一个下面包含了Levelnode结构classes@TimOgunmakin我改变了答案,很可能是因为这个问题。