首页 > 解决方案 > C++ 错误:预期的类成员或基类名称 ...int e、int f、string pa、string direct、string distrib):公共视频

问题描述

我们认为我们的继承有问题,但我们不知道如何解决它。(我们有 OOP 类)

控制台打印...

clang++-7 -pthread -std=c++17 -o main Pelicula.cpp Serie.cpp Video.cpp main.cpp
Pelicula.cpp:7:115: error: expected class member or base class name
  ...int e, int f, string pa, string direct, string distrib) : public Video(a...
                                                               ^
1 error generated.
Serie.cpp:7:83: error: expected class member or base class name
  ...b, string c, int d, int e, int f, int ab, int cd) : public Video(a,b,c,d...
                                                         ^
1 error generated.
exit status 1

使用此代码:

主文件

#include <iostream>
#include "Video.h"
#include "Serie.h"
#include "Pelicula.h"
using namespace std;

int main(){
  
  Video *catalogo[2];
  catalogo[0]= new Serie("Serie Narrativa","Stranger Things","Fantastico",8,50,120,25,4);
  //vector[1]= new Serie("Falcon & The Winter Soldier",6,1);
  catalogo[0]->muestraDatos();


  int sel;
  cout<<"+++++++++++++++\n\n=== Bienvenido a La plataforma SAJ ===\n\nElija las opciones\n1)Consultar peliculas y series\n2)Calificar"<<endl;
  cin>>sel;
  switch(sel){
    case 1:
      cout<<"CONSULTAR TOTAL DE VIDEO"<<endl;
      //consultor
      /*
      int busqueda
      for (int i=0;i<=tamaño automotor;i++){
        if (automotor[x]->getTipoVideo()==busqueda)
          busqueda=i;
      }
      automotor[busqueda];
      */
    break;
    case 2:
      cout<<"Calificar video"<<endl;
    break;
  }
}

视频.h

#ifndef VIDEO_H
#define VIDEO_H

#include <iostream>
using namespace std;

class Video{
  public:
  Video(string a, string b, string c, int d, int e, int f);
  void calificaVideo();
  virtual void muestraDatos(); //agrega virtual luego Herencia

  string getTipoVideo();
  
  private:
  string tipoVideo;
  string nombreVideo;
  string genero;
  int calif;
  int anioLanz;
  int duracion;
};

#endif

视频.cpp

#include <iostream>
#include "Video.h"
//#include "Serie.h"
//#include "Pelicula.h"
using namespace std;

Video::Video(string a, string b, string c, int d, int e, int f){
  tipoVideo=a;
  nombreVideo=b;
  genero=c;
  if(d<0){d=0;}
  else if(d>10){d=10;}
  calif=d;
  anioLanz=e;
  duracion=f;
}
void Video::muestraDatos(){
  cout<<"IMPRIMIR REGISTRO\nTipo de video: "<<tipoVideo<<"\nTítulo: "<<nombreVideo<<"\nGenero: "<<genero<<"\nCalificacion: "<<calif<<"\nAño de lanzamiento: "<<anioLanz<<"\nDuracion: "<<duracion<<endl;
}
void Video::calificaVideo(){
  int d;
  cout<<"Deme calificacion: ";
  cin>>d;
  if(d<0){d=0;}
  else if(d>10){d=10;}
  calif=d;
  cout<<d<<" - Guardado!"<<endl;
}
string Video::getTipoVideo(){
  return tipoVideo;
}

系列.h

#ifndef SERIE_H
#define SERIE_H

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

class Serie : public Video{
  public:
  Serie(string, string, string, int, int, int, int, int);
  void muestraDatos();
  private:
  int episod_portemp;
  int temporadas;
};

#endif

系列.cpp

#include <iostream>
#include "Serie.h"
//#include "Video.h"

using namespace std;

Serie::Serie(string a, string b, string c, int d, int e, int f, int ab, int cd) : public Video(a,b,c,d,e,f){
  episod_portemp=ab;
  temporadas=cd;
}

void Serie::muestraDatos(){
  Video::muestraDatos();
  cout<<"Episodios por temporada: "<<episod_portemp<<endl;
  cout<<"Temporadas: "<<temporadas<<endl;
}

鹈鹕.h

#ifndef PELICULA_H
#define PELICULA_H

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


class Pelicula : public Video{
  public:
  Pelicula(string, string, string, int, int, int, string, string, string);
  void muestraDatos();
  private:
  string pais;
  string director;
  string distribuidor;
};

#endif

Pelicula.cpp

#include <iostream>
#include "Pelicula.h"
//#include "Video.h"

using namespace std;

Pelicula::Pelicula(string a, string b, string c, int d, int e, int f, string pa, string direct, string distrib) : public Video(a,b,c,d,e,f){
  pais=pa;
  director=direct;
  distribuidor=distrib;
}
void Pelicula::muestraDatos(){
  Video::muestraDatos();
  cout<<"Pais: "<<pais<<endl;
  cout<<"Director: "<<director<<endl;
  cout<<"Distribuidora: "<<distribuidor<<endl;
}

在导致这个问题之前,打印了另一个问题,它是“重新声明”类视频,如果这可能相关,idk。

标签: c++inheritance

解决方案


您将继承声明为public. 您不会以相同的方式声明构造函数。

换句话说:

Serie::Serie(string a, string b, string c, int d, int e, int f, int ab, int cd) :  Video(a,b,c,d,e,f) { ...
}

注意:为避免多余的副本,请使用const std::string&您的默认参数类型。


推荐阅读