C ++ связанные списки со структурой

0

Я новичок в C++, и у меня есть что-то связанное с связанным списком, и я не знаю, почему это не работает, нужна помощь от prof: O)

Вот мой.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;"
  • 0
    какое базовое имя?
Показать ещё 1 комментарий
Теги:
this
singly-linked-list

2 ответа

0

В коде есть так много ужасных проблем, я предлагаю вам больше узнать C++, прежде чем писать список ссылок.

1. Что такое nombrebase?

Думаю, никто не может ответить.

2. Вы должны назначить класс C++ new ключевым словом вместо malloc.

new вызывает не только распределение, но и конструктор класса, а malloc выделяет только.

3. Thecube должен быть определен внутри ACube

Поскольку код в вашем main() ссылается на cube элемента в классе Thecube, main() должен знать, что это такое.

4. Член next в классе ACube является указателем, который указывает на то, что?

На что указывает указатель без инициализации? Вы должны инициализировать его в конструкторе и уничтожить его в деструкторе.

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
    Спасибо, ваше объяснение мне кажется хорошим. Я вернусь позже с моим анализом. Благодарю.
  • 0
    Спасибо за вашу помощь. Вы сказали: temp-> next-> base = inc; // <- это не связанный список, вы должны изменить. Итак, как я могу создать связанный список? Я изучаю C ++, и у меня есть упражнение с просьбой создать его, но мы не нашли способ создать связанный список, и я сам пытаюсь найти решение. Я знаю, что мне нужно поле для данных и поле для указателя Next, но как я могу создать свой связанный список? Спасибо
Показать ещё 1 комментарий
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 pointer.

  • 0
    Спасибо, я проверю это сегодня и вернулся с комментариями. Спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню