Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法在函数main()中创建抽象类的指针 #包括 #包括 #包括 班机 { 私人: 国际航班号; 字符源[30],目标[30]; 受保护的: 双倍票价; 公众: 航班() { flightno=0; 源[0]='\0'; 目的地[0]='\0'; 票价=0.0; } 航班(整数f,字符s[],字符d[],双fr) { flightno=f; strcpy(来源,s); strcpy(目的地,d); 票价=fr; } 航班(航班和飞行) { flightno=f.flightno; strcpy(来源,f.来源); strcpy(目的地,f.目的地); 票价=f.票价; } 虚拟无效接受() { 库夫利特诺; cout_C++_Pointers_Abstract - Fatal编程技术网

C++ 无法在函数main()中创建抽象类的指针 #包括 #包括 #包括 班机 { 私人: 国际航班号; 字符源[30],目标[30]; 受保护的: 双倍票价; 公众: 航班() { flightno=0; 源[0]='\0'; 目的地[0]='\0'; 票价=0.0; } 航班(整数f,字符s[],字符d[],双fr) { flightno=f; strcpy(来源,s); strcpy(目的地,d); 票价=fr; } 航班(航班和飞行) { flightno=f.flightno; strcpy(来源,f.来源); strcpy(目的地,f.目的地); 票价=f.票价; } 虚拟无效接受() { 库夫利特诺; cout

C++ 无法在函数main()中创建抽象类的指针 #包括 #包括 #包括 班机 { 私人: 国际航班号; 字符源[30],目标[30]; 受保护的: 双倍票价; 公众: 航班() { flightno=0; 源[0]='\0'; 目的地[0]='\0'; 票价=0.0; } 航班(整数f,字符s[],字符d[],双fr) { flightno=f; strcpy(来源,s); strcpy(目的地,d); 票价=fr; } 航班(航班和飞行) { flightno=f.flightno; strcpy(来源,f.来源); strcpy(目的地,f.目的地); 票价=f.票价; } 虚拟无效接受() { 库夫利特诺; cout,c++,pointers,abstract,C++,Pointers,Abstract,您正在创建一个指向flight的指针,但您也在尝试创建nflight对象:您正在创建的数组是flight的数组,而不是flight的指针数组 所以这是行不通的 例如,您可以使用一个std::vector(也可能在容器内使用一个智能指针)。(或者一个指向flight的指针数组。) 对于你的作业,不要试图把它都挤在一行里,它不会给你带来任何好处。写得更清楚,它就会起作用: #include<iostream.h> #include<conio.h> #includ

您正在创建一个指向flight的指针,但您也在尝试创建
n
flight对象:您正在创建的数组是flight的数组,而不是flight的指针数组

所以这是行不通的

例如,您可以使用一个
std::vector
(也可能在容器内使用一个智能指针)。(或者一个指向flight的指针数组。)

对于你的作业,不要试图把它都挤在一行里,它不会给你带来任何好处。写得更清楚,它就会起作用:

  #include<iostream.h>
  #include<conio.h>
  #include<string.h>
  class flight
  {
private :
int flightno;
char source[30],destination[30];
protected :
double fare;
public :
flight()
{
    flightno=0;
    source[0]='\0';
    destination[0]='\0';
    fare=0.0 ;
}
flight(int f,char s[],char d[],double fr)
{
    flightno=f;
    strcpy(source,s);
    strcpy(destination,d);
    fare=fr;
}
flight(flight &f)
{
    flightno=f.flightno;
    strcpy(source,f.source);
    strcpy(destination,f.destination);
    fare=f.fare;
}
virtual void accept()
{
    cout<<"\nEnter Fligt no :";
    cin>>flightno;
    cout<<"\nEnter source :";
    cin.getline(source,30);
    cout<<"\nEnter destination :";
    cin.getline(destination,30);
    cout<<"\nEnter fare :";
    cin>>fare;
}
virtual void display()
{
    cout<<"\nFlight number :"<<flightno;
    cout<<"\nsource        :"<<source;
    cout<<"\nDestination   :"<<destination;
    cout<<"\nflight fare   :"<<fare;
  }
   virtual double computefare()=0;
 };
 class domestic : public flight
 {
private :
int noc,noa;
double totalfare,discount;
public :
domestic()
{
    noc=0;
    noa=0;
    totalfare=0.0;
    discount=0.0;
}
domestic(int f,char s[],char d[],double fr,int nc,int na):flight(f,s,d,fr)
{
    noc=nc;
    noa=na;
    totalfare=0.0;
    discount=0.0;
}
domestic(domestic &d):flight(d)
{
    noc=d.noc;
    noa=d.noa;
    totalfare=d.totalfare;
    discount=d.discount;
}
void accept()
{
    flight::accept();
    cout<<"\nEnter no. of adults :";
    cin>>noa;
    cout<<"\nEnter no. of children :";
    cin>>noc;
}
void display()
{
    flight::display();
    cout<<"\n no. of adults :"<<noa;
    cout<<"\n no. of children :"<<noc;
    cout<<"\n total fare :"<<totalfare;
    cout<<"\n discount :"<<discount;
    if(discount!=0)
    cout<<"After disc: "<<(totalfare-discount);
}
double computefare()
{
    totalfare=noc*flight::fare*0.5+noa*flight::fare;
    if(totalfare>40000)
        discount=0.02*totalfare;
    return totalfare-discount;
}
 };
 class internatinal : public flight
 {
private :
int nop;
double totalfare,tax;
public :
internatinal()
{
    nop=0;
    totalfare=0.0;
    tax=0.0;
}
internatinal(int f,char s[],char d[],double fr,int np):flight(f,s,d,fr)
{
    nop=np;
    totalfare=0.0;
    tax=0.0;
}
internatinal(internatinal &i):flight(i)
{
    nop=i.nop;
    totalfare=i.totalfare;
    tax=i.tax;
}
void accept()
{
    flight::accept();
    cout<<"\nEnter no. of passenger :";
    cin>>nop;
}
void display()
{
    flight::display();
    cout<<"\n no. of passenger :"<<nop;
    cout<<"\n total fare :"<<totalfare;
    cout<<"\n tax :"<<tax;
    cout<<"After tax: "<<(totalfare+tax);
}
double computefare()
{
    totalfare=nop*flight::fare;
    tax=0.30*totalfare;
    return totalfare+tax;
}
 };
 int main()
 {
int i,n,ch;
double total=0;
cout<<"\n Enter no of transaction :" ;
cin>>n;
flight *f=new flight[n];
for(i=0;i<n;i++)
{
    cout<<"\n Enter 1 : domestic \n 2. internatinal :";
    cin>>ch;
    f[i]=ch==1?new domestic():new internatinal();
    f[i]->accept();
    total+=f[i]->computefare();
}
cout<<"\n totaL fare :"<<total;
getch();
return 0;
 }

(另一个选项是使用强制转换,但这会使该行更不可读。)

您正在创建一个指向flight的指针,但您也在尝试创建
n
flight对象:您正在创建的数组是一个flight数组,而不是指向flight的指针数组

所以这是行不通的

例如,您可以使用一个
std::vector
(也可能在容器内使用一个智能指针)。(或者一个指向flight的指针数组。)

对于你的作业,不要试图把它都挤在一行里,它不会给你带来任何好处。写得更清楚,它就会起作用:

  #include<iostream.h>
  #include<conio.h>
  #include<string.h>
  class flight
  {
private :
int flightno;
char source[30],destination[30];
protected :
double fare;
public :
flight()
{
    flightno=0;
    source[0]='\0';
    destination[0]='\0';
    fare=0.0 ;
}
flight(int f,char s[],char d[],double fr)
{
    flightno=f;
    strcpy(source,s);
    strcpy(destination,d);
    fare=fr;
}
flight(flight &f)
{
    flightno=f.flightno;
    strcpy(source,f.source);
    strcpy(destination,f.destination);
    fare=f.fare;
}
virtual void accept()
{
    cout<<"\nEnter Fligt no :";
    cin>>flightno;
    cout<<"\nEnter source :";
    cin.getline(source,30);
    cout<<"\nEnter destination :";
    cin.getline(destination,30);
    cout<<"\nEnter fare :";
    cin>>fare;
}
virtual void display()
{
    cout<<"\nFlight number :"<<flightno;
    cout<<"\nsource        :"<<source;
    cout<<"\nDestination   :"<<destination;
    cout<<"\nflight fare   :"<<fare;
  }
   virtual double computefare()=0;
 };
 class domestic : public flight
 {
private :
int noc,noa;
double totalfare,discount;
public :
domestic()
{
    noc=0;
    noa=0;
    totalfare=0.0;
    discount=0.0;
}
domestic(int f,char s[],char d[],double fr,int nc,int na):flight(f,s,d,fr)
{
    noc=nc;
    noa=na;
    totalfare=0.0;
    discount=0.0;
}
domestic(domestic &d):flight(d)
{
    noc=d.noc;
    noa=d.noa;
    totalfare=d.totalfare;
    discount=d.discount;
}
void accept()
{
    flight::accept();
    cout<<"\nEnter no. of adults :";
    cin>>noa;
    cout<<"\nEnter no. of children :";
    cin>>noc;
}
void display()
{
    flight::display();
    cout<<"\n no. of adults :"<<noa;
    cout<<"\n no. of children :"<<noc;
    cout<<"\n total fare :"<<totalfare;
    cout<<"\n discount :"<<discount;
    if(discount!=0)
    cout<<"After disc: "<<(totalfare-discount);
}
double computefare()
{
    totalfare=noc*flight::fare*0.5+noa*flight::fare;
    if(totalfare>40000)
        discount=0.02*totalfare;
    return totalfare-discount;
}
 };
 class internatinal : public flight
 {
private :
int nop;
double totalfare,tax;
public :
internatinal()
{
    nop=0;
    totalfare=0.0;
    tax=0.0;
}
internatinal(int f,char s[],char d[],double fr,int np):flight(f,s,d,fr)
{
    nop=np;
    totalfare=0.0;
    tax=0.0;
}
internatinal(internatinal &i):flight(i)
{
    nop=i.nop;
    totalfare=i.totalfare;
    tax=i.tax;
}
void accept()
{
    flight::accept();
    cout<<"\nEnter no. of passenger :";
    cin>>nop;
}
void display()
{
    flight::display();
    cout<<"\n no. of passenger :"<<nop;
    cout<<"\n total fare :"<<totalfare;
    cout<<"\n tax :"<<tax;
    cout<<"After tax: "<<(totalfare+tax);
}
double computefare()
{
    totalfare=nop*flight::fare;
    tax=0.30*totalfare;
    return totalfare+tax;
}
 };
 int main()
 {
int i,n,ch;
double total=0;
cout<<"\n Enter no of transaction :" ;
cin>>n;
flight *f=new flight[n];
for(i=0;i<n;i++)
{
    cout<<"\n Enter 1 : domestic \n 2. internatinal :";
    cin>>ch;
    f[i]=ch==1?new domestic():new internatinal();
    f[i]->accept();
    total+=f[i]->computefare();
}
cout<<"\n totaL fare :"<<total;
getch();
return 0;
 }

(另一个选项是使用强制转换,但这将使该行更不可读。)

okk我已将其更改为flight*p[50]该错误已解决。但错误在于“f[i]=ch==1?new Homeland():new International();”lines错误是两个操作数必须在main()中计算为同一类型“@rick:条件运算符要求第二个和第三个操作数的类型相同,因此出现错误。您需要使用强制转换(static_cast)来解决此错误。@rick:更新了我的答案,很抱歉没有看到这个问题。”。(如果你可以,可以得到一个更新近的编译器;在Windows上,明文是GCC的一个很好的端口,TurboC + +在当前的C++标准上已经过时了)。我在指针方面的知识非常有限。请给我一个完整的指针的来源,包括所有的东西???只需搜索“C指针”。你会得到很多不同的教程/文档,试图用不同的方式来描述它们。一旦你“了解”它们的工作原理,一切都是有意义的,但没有一个参考资料可以说明这一点——不同的人需要不同的演示才能真正“了解”。尽可能多地阅读,并进行实验,最终你会得到它(其实没那么难,只是有点棘手)。对于C来说,没有一个引用“包含所有内容”(对于C++),更不用说了。okk我已经将它改为flight*p[50],这个错误已经解决了。但是nw的错误在于“f[i]=ch==1?new national():new internatinal();“lines错误是两个操作数必须在main()中计算为相同的类型。”“@rick:条件运算符要求第二个和第三个操作数的类型相同,因此出现错误。您需要使用强制转换(static_cast)来解决此错误。@rick:更新了我的答案,很抱歉没有看到这个问题。”。(如果你可以,可以得到一个更新近的编译器;在Windows上,明文是GCC的一个很好的端口,TurboC + +在当前的C++标准上已经过时了)。我在指针方面的知识非常有限。请给我一个完整的指针的来源,包括所有的东西???只需搜索“C指针”。你会得到很多不同的教程/文档,试图用不同的方式来描述它们。一旦你“了解”它们的工作原理,一切都是有意义的,但没有一个参考资料可以说明这一点——不同的人需要不同的演示才能真正“了解”。尽可能多地阅读,并进行实验,最终你会得到它(其实没那么难,只是有点棘手)。没有一个引用“包含所有内容”用于C(更不用说C++)。