0

私が取り組んでいる C++ プログラムについて助けが必要です。

私はオペレーティング システムのクラスを取っているので、最初の数週間は C プログラミングの短期集中コースでしたが、今度は C プログラムを C++ にアップグレードすることになっています。私の教授は私たちにいくつかのサンプル コードを示し、いくつかのチュートリアルを見せてくれましたが、ここまでしか理解できませんでした。

ヘッダー ファイル、関数を実装するための .cpp ファイル、およびテスト ファイル (ここからエラーが発生します) を使用しています。

//dll.h

#ifndef _DLL_H
#define _DLL_H
using namespace std;
#include <iostream>
#include <string>

class dll{
public:
typedef struct _Node
{

    struct _Node *pNode;
    struct _Node *nNode;
    int nodeValue;

}sNode;

typedef struct
{

    sNode first; 

}DLList;

dll();
~dll();
void init(DLList *DLL,int d);
void sort(DLList *DLL);
void print(DLList *DLL);

};

#endif

メインの .cpp ファイル:

//dll.cpp

using namespace std; 
#include <iostream>
#include <string>
#include <stdio.h>
#include <cstdlib>
#include "dll.h"

dll::dll(){

    cout<<"Constructor called"<<endl;

}

dll::~dll(){

    cout<<"Destructor called"<<endl;

}

void dll::init(DLList *DLL, int d)
{

    sNode *node;    
    sNode *pNode;
    pNode = &(DLL-> first);
    pNode->pNode = NULL;
    int i;
    for(i=0; i<d; i++)
    {

            node = (sNode*) malloc(sizeof(node));
            node-> nodeValue = rand();
            node-> pNode = pNode;
            node-> nNode = NULL;
            pNode-> nNode = node;
            pNode = node;

    }

}

void dll::print(DLList *DLL)
{

    int i= 1;
    sNode *nNode = DLL-> first.nNode;   
    while(nNode != NULL)

    {

            cout<<("%d.  %d\n",i,nNode-> nodeValue);
            cout<<("");
            nNode = nNode-> nNode;
            i++;

    }

}

void dll::sort(DLList *DLL)
{

    int change = 1;
    while(change== 1)

    {

            change = 0;     
            sNode *current = DLL-> first.nNode;
            while(current-> nNode != NULL)

            {

                    if(current-> nodeValue > current-> nNode-> nodeValue)
                    {

                            int temp = current-> nodeValue;
                            current-> nodeValue = current-> nNode-> nodeValue;
                            current-> nNode-> nodeValue = temp;
                            change = 1;

                    }

                    current = current-> nNode;
            }

    }

    }

今、私のエラーがポップアップし続けるテストファイル:

//testDLL.cpp


using namespace std; 
#include <iostream>
#include <string>
#include <stdio.h>
#include <cstdlib>
#include "dll.h"

int main()
{

    cout<<("Doubly Linked List before sorting: \n");    
    dll::DLList DLL;
    dll *test =  new dll();
    test.dll::init(&DLL,5);
    test.dll::print(&DLL);
    test.dll::sort(&DLL);
    cout<<("\nDoubly Linked List after sorting: \n");
    test.dll::print(&DLL);
    return 0;
} 

プログラムが作成されたので、コンパイルしようとするたびにこれに遭遇し続けます(Linuxコマンドラインでg ++を使用):

testDLL.cpp: In function ‘int main()’:
testDLL.cpp:17:7: error: request for member ‘init’ in ‘test’, which is of non-class type ‘dll*’
testDLL.cpp:19:12: error: request for member ‘dll:: print’ in ‘test’, which is of non-class type ‘dll*’
testDLL.cpp:21:12: error: request for member ‘dll:: sort’ in ‘test’, which is of non-class type ‘dll*’
testDLL.cpp:25:12: error: request for member ‘dll:: print’ in ‘test’, which is of non-class type ‘dll*’

私はこれに完全に困惑しているので、皆さんが私に与えることができるどんな助けも大歓迎です.

4

1 に答える 1

1

ポインターとして使用dllしている場合、宣言は正しいです。

dll* test = new dll();

dllオブジェクトとして使用している場合、宣言は次のようになります。

dll test;

これにより、コンストラクタとデストラクタが自動的に呼び出されます。

dllポインタとして使用している場合、呼び出しは次のようにinitなります (NULL をチェックする必要はありませんが、プログラムのクラッシュを防ぐのに役立ちます)。

if (dll != NULL) {
    dll->init(&DLL, 5);
}

dllオブジェクトとして使用している場合、呼び出しは次のようにinitなります。

 dll.init(&DLL, 5);
于 2013-02-10T23:14:48.447 に答える