2014-04-07 39 views
0

我用C++新,我有事情做一个链表,我不知道为什么它不能正常工作,需要从教授的帮助:O)C++链表与结构

这里是我的.h

#ifndef UnCube_H 
#define UnCube_H 

using namespace std; 

class ACube{ 
    public: 
     ACube(); 
     struct Thecube; 
    private: 
      void PrintList(); 

    }; 
#endif 

我ACube.cpp

#include <iostream> 
#include "ACube.h" 


ACube::ACube(){ 

}; 
struct Thecube{ 
    int base; 
    int cube; 
    Thecube * next ; 
}; 


void ACube::PrintList(){ 
}; 

,最后我的main.cpp

#include <cstdlib> 
#include <iostream> 
#include "ACube.h" 

using namespace std; 

int main() 
{ 
ACube * temp; 
temp = (ACube*)malloc(sizeof(ACube)); 
for (int inc=1; inc <=20 ; inc++){ 

    temp->ACube->nombrebase = inc; 
    temp->cube = inc*inc*inc; 
} 
system("PAUSE"); 
return EXIT_SUCCESS; 
}    

一切工作正常,但是当我添加这些行:

temp->ACube->nombrebase = inc; 
    temp->cube = inc*inc*inc; 

我添加错误说: “类ACube”没有名为“TheCube” “类ACube”没有名为“立方体”成员成员

有人可以帮助我,因为我想创建我的列表并用数字填充多维数据集。 我想用这个的其他事情。在打印中,

也许有人可以教我什么是错的,以及如何去做!

感谢您的帮助

+1

你似乎更熟悉C.你可以先取代成员“struct thecube;”成员为“ACube * next; int base; int cube;” – dan

+0

什么是nombrebase? – zdd

+0

为什么函数定义后有分号?另外,不要使用'malloc'(如果你必须使用'new',而不是裸露的,应该在句柄类中)。我建议你找到一本初学者的书,并从头开始。 – noobProgrammer

回答

0

你不需要在你的类中有一个结构。

#ifndef UnCube_H 
#define UnCube_H 

using namespace std; 

class ACube{ 
    public: 
    ACube(); 
    int base; 
    int cube; 
    ACube * next ; 
    private: 
      void PrintList(); 

    }; 
#endif 

ACube.cpp

#include <iostream> 
#include "ACube.h" 


ACube::ACube(){ 

}; 

void ACube::PrintList(){ 
}; 

而且,这个字符串是错误的:

temp->ACube->nombrebase = inc; 

应该只是:

temp->base = inc; 

最后但并非最不重要的,这个代码不会创建链接列表,因为你这样做不要对ACube :: next指针做任何事情。

+0

谢谢,我今天会检查一下,并回复评论。谢谢 – baronming

0

在你的代码中有太多可怕的问题,我建议你在编写链表之前应该学习更多的C++知识。

1.什么是nombrebase

我想没有人能回答。

2.您必须通过new关键字而不是malloc分配C++类。

new不仅调用分配,而且调用类构造函数,而malloc只分配。

3。Thecube应该内ACube

Thecube类中定义由于您的main()指码会员cube,主()必须知道它是什么。

4. ACube类中的成员next是一个指针指向什么?

指针指向什么没有启动?你应该在构造函数中初始化它,并在析构函数中销毁它。

5. temp->ACube

ACube是类类型,您可以访问成员对象,而不是一个类型。

6.不要使用命名空间到一个头文件

它将使头文件的客户端名称冲突。

以下是更正的代码。只是没有编译错误和运行时错误,但这不是链表:

ACube.h

#ifndef UnCube_H 
#define UnCube_H 

class ACube{ 
public: 
    struct Thecube 
    { 
     int base; 
     int cube; 
     Thecube * next; 
    }; 


    ACube(); 
    ~ACube(); 
    Thecube *next; 

private: 
    void PrintList(); 

}; 
#endif 

ACube.cpp

ACube::ACube() 
: next(new Thecube) 
{ 

} 

ACube::~ACube() 
{ 
    delete next; 
} 

void ACube::PrintList(){ 
} 

的main.cpp

#include <cstdlib> 
#include <iostream> 
#include "ACube.h" 

using namespace std; 

int main() 
{ 
    ACube * temp; 
    temp = new ACube; 
    for (int inc = 1; inc <= 20; inc++) 
    { 
     temp->next->base = inc; // <-- This is not linked list, you shall modify. 
     temp->next->cube = inc*inc*inc; // <-- This is not linked list, you shall modify. 
    } 
    system("PAUSE"); 
    return EXIT_SUCCESS; 
} 
+0

谢谢,你的解释对我来说似乎很好。稍后我会回来分析。谢谢。 – baronming

+0

感谢您的帮助。你说:temp-> next-> base = inc; // < - 这不是链表,你应该修改。那么我如何创建一个链表?我正在学习C++,并且有一个练习要求创建它,但是我们没有看到创建链接列表的方法,我自己试着找到一个解决方案。我知道我需要数据字段和下一个指针字段,但我如何创建链接列表?谢谢 – baronming

+0

您编写的代码是将inc和inc * inc * inc分配给循环中的相同目标。我认为你使用循环的目的是分配给20个链接列表的不同节点。这是如何编码链表的另一个故事。你的代码中最大的问题是你现在不擅长C++,你应该在编写链表之前学习C++。 – cbel