Я новичок в 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 "не имеет имени с именем" куб ",
Может кто-то мне помочь, потому что я хочу создать свой список и заполнить куб номером. Другая вещь, которую я хочу использовать ЭТО. в печати,
Может быть, кто-то может научить меня тому, что неправильно и как это сделать!
Спасибо за любую помощь
В коде есть так много ужасных проблем, я предлагаю вам больше узнать 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;
}
Вам не нужно иметь структуру внутри вашего класса.
#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.