免责声明:我看过其他可能熟悉这种情况的问题,但是我没有找到解决方案
情况:我正在尝试创建Levelnode类型的链接列表(结构)。创建新节点后,应创建一个新级别(级别类)。
问题:我在第18行收到一个错误(.cpp文件,而不是头文件),并带有-
Error 2 error C2512: 'Levelnode' : no appropriate default constructor available c:\users\timi\desktop\ludum dare\ld27\nodes.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
成员,并且Level
缺少默认ctor,由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,如果该类有意义的话。