2

免責事項:この状況によくある他の質問を調べましたが、解決策が見つかりませんでした

状況:タイプ 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
4

1 に答える 1

3

最も可能性の高い原因は、あなたのLevelnode構造体以来です:

struct Levelnode
{
    Level L;
    Levelnode * next;
};

にはLevelメンバーがありLevel、デフォルトの ctor がありません。デフォルトのコンパイラ生成Levelnodeの ctor は、Levelnode::L メンバーを初期化できません。その結果、コンパイラは実際にはデフォルトのLevelnodector をまったく生成しません。を作成しようとするとLevelnode:

Levelnode node;

Levelnodeデフォルトの ctor がないというエラーが表示されます。

Levelnode適切な ctor を使用して Levelnode::L を初期化する独自のデフォルト ctor を提供する必要がありますL。お気に入り:

struct Levelnode
{
    Level L;
    Levelnode * next;

    Levelnode()
        : L(ctor arguments)
    { }
};

Level別の解決策は、そのクラスにとって意味がある場合、デフォルトの ctor を提供することです。

于 2013-09-24T00:27:46.710 に答える