gpt4 book ai didi

c++ - C++中的非类类型错误

转载 作者:行者123 更新时间:2023-12-02 11:11:03 26 4
gpt4 key购买 nike

我正在使用的C++程序需要一些帮助。

我正在上操作系统类(class),所以我们的前几周是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;
}

}

}

现在是测试文件,这是我的错误不断 pop 的地方:
//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*’

我对此深感沮丧,因此,你们能给我的任何帮助将不胜感激。

最佳答案

如果将dll用作指针,则声明正确。

dll* test = new dll();

如果使用 dll作为对象,则声明应为:
dll test;

这将导致构造函数和析构函数自动调用。

如果您将 dll用作指针,则对 init的调用应为(不必检查NULL,但这将有助于防止程序崩溃):
if (dll != NULL) {
dll->init(&DLL, 5);
}

如果将 dll用作对象,则对 init的调用应为:
 dll.init(&DLL, 5);

关于c++ - C++中的非类类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14803570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com