Destroy array in C++

Asked

Viewed 42 times

-1

Speak devs, I’m trying to destroy the Wheel array but I get an error message:

error: expected Primary-Expression before ';' token

How can I fix the error? Follow my files if you can take a look:

practice01.cpp

#include <iostream>
#include <locale.h>
#include "veiculo.h"
#include "veiculo.cpp"

using namespace std;

int main()
{
    setlocale(LC_ALL, "portuguese");

    cout << "Primeira aplicação C++" << endl;

    /*
    Veiculo veiculo1("v1");
    {
        Veiculo veiculo2("v2");
        {
            Veiculo veiculo3("v3");
        }
    }*/

    Veiculo *obj1 = new Veiculo("v1");
    {
        Veiculo *obj2 = new Veiculo("v2");
        {
            Veiculo *obj3 = new Veiculo("v3");

            obj3->setNumRodas(3, 3);
            cout << "Número de rodas: " << obj3->getNumRodas() << endl;

            obj3->~Veiculo();
        }
        obj2->setNumRodas(2, 2);
        cout << "Número de rodas: " << obj2->getNumRodas() << endl;

        obj2->~Veiculo();
    }
    obj1->setNumRodas(1, 1);
    cout << "Número de rodas: " << obj1->getNumRodas() << endl;

    obj1->~Veiculo();

    return 0;
}

vehicle. h

#ifndef VEICULO_H_INCLUDED
#define VEICULO_H_INCLUDED

using namespace std;

class Roda
{
    Roda()
    {

        cout << "Objeto construído!" << endl;
    }

    ~Roda()
    {
        cout << "Objeto destruído!" << endl;
    }
};

class Veiculo
{
private:
    string nome;
    int num_rodas;
    Roda *rodas;

public:
    Veiculo(const char *param);

    ~Veiculo();

    void setNumRodas(int nRodas, int tamanho);

    int getNumRodas();

};

#endif // VEICULO_H_INCLUDED

vehicle cpp.

#include <iostream>

using namespace std;

Veiculo::Veiculo(const char *param)
{
    this->nome = string(param);
    this->rodas = NULL;
    cout << "Um objeto foi construído com nome " << nome << endl;
}

Veiculo::~Veiculo()
{
    cout << "O objeto " << nome << " foi destruído!" << endl;
    delete [] Roda;
};

void Veiculo::setNumRodas(int nRodas, int tamanho)
{
    this->num_rodas = nRodas;
    Roda *rodas[tamanho];

}

int Veiculo::getNumRodas()
{
    return this->num_rodas;
}

1 answer

1


Addressing the problem mentioned in the question:

If I understand correctly, you need to delete the property rodas which is an array/pointer. The problem is that you are trying to remove the type Roda and not the property rodas of your class Veiculo:

cout << "O objeto " << nome << " foi destruído!" << endl;
delete [] Roda; // "Roda" é um tipo

The correct for exclusion would be:

cout << "O objeto " << nome << " foi destruído!" << endl;
delete[] this->rodas; // Agora "rodas" é uma propriedade

And so you can compile the code by accessing the property correctly:

It is necessary to include the file veiculo.h at the beginning of the archive veiculo.cpp, given that it is not found in the code you put in the question. The file needs to know which type Roda has statements in another file:

#include <iostream>
#include "veiculo.h"
using namespace std;

Change class methods access Roda for public, given that by default C++ sets them as private. Otherwise, statements will not be found in other files:

public: // Alterando nível de acesso
    Roda()
    {
        cout << "Objeto construído!" << endl;
    }

    ~Roda()
    {
        cout << "Objeto destruído!" << endl;
    }

And to compile, simply remove the #include veiculo.cpp of the archive pratica01.cpp and compile the files pratica01.cpp and veiculo.cpp together; it is important that the files veiculo.cpp and pratica01.cpp know the archive veiculo.h and are indicated together in the compilation:

g++ pratica01.cpp veiculo.cpp -o program

But they don’t need to know of each other’s existence. Otherwise, the file pratica01.cpp, that previously had the two inclusions, would see that there are duplicate statements for the types and a message as below would be returned during the compilation process:

/usr/bin/ld: /tmp/ccjaUKpo.o: in function `Veiculo::Veiculo(char const*)':
veiculo.cpp:(.text+0x0): multiple definition of `Veiculo::Veiculo(char const*)'; /tmp/ccuappVo.o:pratica01.cpp:(.text+0x0): first defined here
/usr/bin/ld: /tmp/ccjaUKpo.o: in function `Veiculo::Veiculo(char const*)':
veiculo.cpp:(.text+0x0): multiple definition of `Veiculo::Veiculo(char const*)'; /tmp/ccuappVo.o:pratica01.cpp:(.text+0x0): first defined here
/usr/bin/ld: /tmp/ccjaUKpo.o: in function `Veiculo::~Veiculo()':
veiculo.cpp:(.text+0x114): multiple definition of `Veiculo::~Veiculo()'; /tmp/ccuappVo.o:pratica01.cpp:(.text+0x114): first defined here
/usr/bin/ld: /tmp/ccjaUKpo.o: in function `Veiculo::~Veiculo()':
veiculo.cpp:(.text+0x114): multiple definition of `Veiculo::~Veiculo()'; /tmp/ccuappVo.o:pratica01.cpp:(.text+0x114): first defined here
/usr/bin/ld: /tmp/ccjaUKpo.o: in function `Veiculo::setNumRodas(int, int)':
veiculo.cpp:(.text+0x1f0): multiple definition of `Veiculo::setNumRodas(int, int)'; /tmp/ccuappVo.o:pratica01.cpp:(.text+0x1f0): first defined here
/usr/bin/ld: /tmp/ccjaUKpo.o: in function `Veiculo::getNumRodas()':
veiculo.cpp:(.text+0x2fc): multiple definition of `Veiculo::getNumRodas()'; /tmp/ccuappVo.o:pratica01.cpp:(.text+0x2fc): first defined here

Browser other questions tagged

You are not signed in. Login or sign up in order to post.