免责声明:我已经查看了其他可能对此情况熟悉的问题,但我找不到解决方案
情况:我正在尝试创建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;
}
}
struct header file:
#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
答案 0 :(得分:3)
最可能的原因是,因为你的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,如果这对该类有意义的话。