继承中的重新定义

问题描述 投票:0回答:1

我目前正在尝试学习 C++ 中的继承,但还没有让代码工作,我将把代码和错误消息放在下面。视频的构造函数似乎引起了一些问题,我尝试了一些东西在线,但我不知道我做错了什么。

视频.h

#include <iostream>
using namespace std;

class video
{
private:
    string tipoVideo;
    string nombreVideo;
    string genero;
    int calificacion;
    int anioLanzamiento;
    int duracion;
public:
    video(string tipoVideo1, string nombreVideo1, string genero1, int anioLanzamiento1, int duracion1);
    video(string tipoVideo1, string nombreVideo1, string genero1, int calificacion1, int anioLanzamiento1, int duracion1);
    string gettipoVideo();
    string getnombreVideo();
    string getgenero();
    int getcalificacion();
    int getanioLanzamiento();
    int getduracion();
    void changeCalificacion(int cal);
};

视频.cpp

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

video::video(string tipoVideo1, string nombreVideo1, string genero1, int anioLanzamiento1, int duracion1)
{
    tipoVideo = tipoVideo1;
    nombreVideo = nombreVideo1;
    genero = genero1;
    anioLanzamiento = anioLanzamiento1;
    calificacion = 0;
    duracion = duracion1;
}

video::video(string tipoVideo1, string nombreVideo1, string genero1, int calificacion1, int anioLanzamiento1, int duracion1)
{
    tipoVideo = tipoVideo1;
    nombreVideo = nombreVideo1;
    genero = genero1;
    anioLanzamiento = anioLanzamiento1;
    calificacion = calificacion1;
    duracion = duracion1;
}

string video::getnombreVideo()
{
    return nombreVideo;
}

string video::gettipoVideo()
{
    return tipoVideo;
}

string video::getgenero()
{
    return genero;
}

int video::getcalificacion()
{
    return calificacion;
}

int video::getduracion()
{
    return duracion;
}

int video::getanioLanzamiento()
{
    return anioLanzamiento;
}

void video::changeCalificacion(int n)
{
    calificacion = n;
}

电影.h

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

class pelicula:public video
{
private:
    string direccion;
public:
    pelicula(string director);
    string getDirector();
};

电影.cpp

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


pelicula::pelicula(string director):video(tipoVideo1, nombreVideo1, genero1, anioLanzamiento1, duracion1)
{
    direccion = director;
}

string pelicula::getDirector()
{
    return direccion;
}

尝试编译时:

In file included from pelicula.h:2,
                 from pelicula.cpp:3:
video.h:4:7: error: redefinition of 'class video'
    4 | class video
      |       ^~~~~
In file included from pelicula.cpp:2:
video.h:4:7: note: previous definition of 'class video'
    4 | class video
      |       ^~~~~
pelicula.cpp: In constructor 'pelicula::pelicula(std::string)':
pelicula.cpp:7:43: error: 'tipoVideo1' was not declared in this scope; did you mean 'tipoVideo'?
    7 | pelicula::pelicula(string director):video(tipoVideo1, nombreVideo1, genero1, anioLanzamiento1, duracion1)
      |                                           ^~~~~~~~~~
      |                                           tipoVideo
pelicula.cpp:7:55: error: 'nombreVideo1' was not declared in this scope; did you mean 'nombreVideo'?
    7 | pelicula::pelicula(string director):video(tipoVideo1, nombreVideo1, genero1, anioLanzamiento1, duracion1)
      |                                                       ^~~~~~~~~~~~
      |                                                       nombreVideo
pelicula.cpp:7:69: error: 'genero1' was not declared in this scope; did you mean 'genero'?
    7 | pelicula::pelicula(string director):video(tipoVideo1, nombreVideo1, genero1, anioLanzamiento1, duracion1)
      |                                                                     ^~~~~~~
      |                                                                     genero
pelicula.cpp:7:78: error: 'anioLanzamiento1' was not declared in this scope; did you mean 'anioLanzamiento'?
    7 | pelicula::pelicula(string director):video(tipoVideo1, nombreVideo1, genero1, anioLanzamiento1, duracion1)
      |                                                                              ^~~~~~~~~~~~~~~~
      |                                                                              anioLanzamiento
pelicula.cpp:7:96: error: 'duracion1' was not declared in this scope; did you mean 'duracion'?
    7 | pelicula::pelicula(string director):video(tipoVideo1, nombreVideo1, genero1, anioLanzamiento1, duracion1)
      |                                                                                                ^~~~~~~~~
      |                                                                                                duracion

我不知道我做错了什么,所以我们将不胜感激

c++ inheritance
1个回答
0
投票

澄清一下:这个问题与继承无关,我将更改标题以避免混淆。

您将 video.h 包含在 pelicula.h 和 pelicula.cpp 中;这会导致编译器认为与称为视频的两个“不同”类存在命名冲突的问题。

有不同的方法可以避免这种情况;最简单的就是添加

#pragma Once

在头文件的开头。

尽管如此,我还是会从 pelicula.cpp 中删除 #include video.h,因为它包含在其头文件中。

© www.soinside.com 2019 - 2024. All rights reserved.