【发布时间】:2013-09-24 09:26:05
【问题描述】:
免责声明:我已经查看了可能与这种情况相似的其他问题,但我没有找到解决方案
情况:我正在尝试创建一个 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没有无参数构造函数。 -
请包含 Level.h 的源代码,我猜它有 struct Levelnode 的声明(否则,包含该标头)
-
结构的声明位于另一个名为 structs.h 的头文件中,我已将其包含在 Nodes.h 和 Nodes.cpp 中
-
抱歉,我的意思是请告诉我们(现在)structs.h 的来源,而不是“#include”。很抱歉造成混乱。
-
structs.h 的源代码已添加 :)
标签: c++ constructor default-constructor