我目前正在尝试学习 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
我不知道我做错了什么,所以我们将不胜感激
澄清一下:这个问题与继承无关,我将更改标题以避免混淆。
您将 video.h 包含在 pelicula.h 和 pelicula.cpp 中;这会导致编译器认为与称为视频的两个“不同”类存在命名冲突的问题。
有不同的方法可以避免这种情况;最简单的就是添加
#pragma Once
在头文件的开头。
尽管如此,我还是会从 pelicula.cpp 中删除 #include video.h,因为它包含在其头文件中。