Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Bài tập kế thừa đa hình lỗi: compiler "can not convert from window* to List"?

  1. #1
    Ngày gia nhập
    06 2011
    Bài viết
    6

    Mặc định Bài tập kế thừa đa hình lỗi: compiler "can not convert from window* to List"?

    Em mới nhập môn có 1 bài demo về tính kế thừa đa hình. làm xong thấy bị 3 lỗi như nhau tại 3 hàm con nhưng ko biết sữa ai sữa hộ em với.

    File .h
    C++ Code:
    1. class List{
    2.     //int number;
    3. public:
    4.     List();
    5.     ~List();
    6.     virtual void input() =0;
    7.     virtual void display() const =0;
    8. };
    9. class window:public List{
    10. public:
    11.     int id;
    12.     double size;
    13.     char color[31];
    14.     double price;
    15.  
    16.     window();
    17.     ~window();
    18.     void input() ;
    19.     void display() const ;
    20.  
    21.     /*friend istream& operator>>(istream& is, window& a);
    22.     friend ostream& operator<<(ostream& os, const window& a); */
    23. };
    24.  
    25. class curtain:public List{
    26. public:
    27.     int id;
    28.     double wid;
    29.     double hei;
    30.     double price;
    31.  
    32.     curtain();
    33.     ~curtain();
    34.     void input() ;
    35.     void display() const ;
    36.     /*friend istream& operator>>(istream& is, curtain& a);
    37.     friend ostream& operator<<(ostream& os, const curtain& a); */
    38. };
    39.  
    40. class table:public List{
    41. public:
    42.     int id;
    43.     double wid;
    44.     double hei;
    45.  
    46.     table();
    47.     ~table();
    48.     void input() ;
    49.     void display() const ;
    50.     /*friend istream& operator>>(istream& is, table& a);
    51.     friend ostream& operator<<(ostream& os, const table& a); */
    52. };
    53. //menu
    54. int menu();

    File setup

    C++ Code:
    1. #include <iostream>
    2. #include <string>
    3. #include <iomanip>
    4. using namespace std;
    5. #include <conio.h>
    6. #include <stdio.h>
    7. #include "Demo.h"
    8. //window
    9. window::window(){
    10.     id=0;
    11.     size=0;
    12.     color[31]=NULL;
    13.     price=0;
    14. }
    15. void window::input() {
    16.                 cout<<"ID: ";
    17.                 cin>>id; //fflush(stdin);
    18.                 if (cin.fail()) {
    19.                     cin.clear();
    20.                     cin.ignore(2000,'\n');
    21.                         cerr << "Invalid entry." << endl;
    22.                 };
    23.                 if(id <= 0) {
    24.                     cin.ignore(2000,'\n');
    25.                     cerr << "ID must be positive." << endl;
    26.                 };
    27.                 if(char(cin.get()) != '\n') {
    28.                     cin.ignore(2000,'\n');
    29.                     cerr << "Trailing characters." << endl;
    30.                 };
    31.            
    32.             //size
    33.                     cout<<"Size: "; cin>>size;// fflush(stdin);
    34.                 if (cin.fail()) {
    35.                         cin.clear();
    36.                         cin.ignore(2000,'\n');
    37.                         cerr << "Invalid entry." << endl;
    38.                     };
    39.                 if(size <= 0) {
    40.                         cin.ignore(2000,'\n');
    41.                         cerr << "Size must be positive." << endl;
    42.                     };
    43.                 if(char(cin.get()) != '\n') {
    44.                         cin.ignore(2000,'\n');
    45.                         cerr << "Trailing characters." << endl;
    46.                     };
    47.                 //color
    48.                 cout<<"Color: "; cin.getline(color,31);
    49.                
    50.                 //price
    51.                 cout<<"Size: "; cin>>price;// fflush(stdin);
    52.                 if (cin.fail()) {
    53.                     cin.clear();
    54.                     cin.ignore(2000,'\n');
    55.                     cerr << "Invalid entry." << endl;
    56.                 };
    57.                 if(price <= 0) {
    58.                     cin.ignore(2000,'\n');
    59.                     cerr << "Size must be positive." << endl;
    60.                 };
    61.                 if(char(cin.get()) != '\n') {
    62.                     cin.ignore(2000,'\n');
    63.                     cerr << "Trailing characters." << endl;
    64.                 };
    65.                
    66.  
    67. }
    68. void window::display() const {
    69.             cout<<fixed<<right<<setw(10)<<"Window"
    70.             <<setw(10) <<"ID: "<<id
    71.             <<setw(10)<<setprecision(2) <<"Size: "<<size
    72.             <<setw(10) <<"Color: "<<color
    73.             <<setw(10)<<setprecision(2) <<"Price: "<<price<<endl;
    74.  
    75. }
    76.  
    77.  
    78.  
    79. //curtain
    80. curtain::curtain(){
    81.     id=0;
    82.     wid=0;
    83.     hei=0;
    84.     price=0;
    85. }
    86. void curtain::input() {
    87.     cout<<"ID: ";
    88.     cin>>id; //fflush(stdin);
    89.     if (cin.fail()) {
    90.         cin.clear();
    91.         cin.ignore(2000,'\n');
    92.         cerr << "Invalid entry." << endl;
    93.     };
    94.     if(id <= 0) {
    95.         cin.ignore(2000,'\n');
    96.         cerr << "ID must be positive." << endl;
    97.     };
    98.     if(char(cin.get()) != '\n') {
    99.         cin.ignore(2000,'\n');
    100.         cerr << "Trailing characters." << endl;
    101.     };
    102.  
    103.     //wid
    104.     cout<<"Width: "; cin>>wid;// fflush(stdin);
    105.     if (cin.fail()) {
    106.         cin.clear();
    107.         cin.ignore(2000,'\n');
    108.         cerr << "Invalid entry." << endl;
    109.     };
    110.     if(wid <= 0) {
    111.         cin.ignore(2000,'\n');
    112.         cerr << "Size must be positive." << endl;
    113.     };
    114.     if(char(cin.get()) != '\n') {
    115.         cin.ignore(2000,'\n');
    116.         cerr << "Trailing characters." << endl;
    117.     };
    118.     //Height
    119.     cout<<"Height: "; cin>>hei;// fflush(stdin);
    120.     if (cin.fail()) {
    121.         cin.clear();
    122.         cin.ignore(2000,'\n');
    123.         cerr << "Invalid entry." << endl;
    124.     };
    125.     if(hei <= 0) {
    126.         cin.ignore(2000,'\n');
    127.         cerr << "Size must be positive." << endl;
    128.     };
    129.     if(char(cin.get()) != '\n') {
    130.         cin.ignore(2000,'\n');
    131.         cerr << "Trailing characters." << endl;
    132.     };
    133.  
    134.     //price
    135.     cout<<"Size: "; cin>>price;// fflush(stdin);
    136.     if (cin.fail()) {
    137.         cin.clear();
    138.         cin.ignore(2000,'\n');
    139.         cerr << "Invalid entry." << endl;
    140.     };
    141.     if(price <= 0) {
    142.         cin.ignore(2000,'\n');
    143.         cerr << "Size must be positive." << endl;
    144.     };
    145.     if(char(cin.get()) != '\n') {
    146.         cin.ignore(2000,'\n');
    147.         cerr << "Trailing characters." << endl;
    148.     };
    149.  
    150. }
    151. void curtain::display() const {
    152.         cout<<fixed<<right<<setw(10)<<"Curtain"
    153.         <<setw(10) <<"ID: "<<id
    154.         <<setw(10)<<setprecision(2) <<"Size: "<<wid
    155.         <<setw(10) <<"Color: "<<hei
    156.         <<setw(10)<<setprecision(2) <<"Price: "<<price<<endl;
    157. }
    158.  
    159.  
    160. //table
    161. table::table(){
    162.     id=0;
    163.     wid=0;
    164.     hei=0;
    165. }
    166. void table::input(){
    167.     cout<<"ID: ";
    168.     cin>>id; //fflush(stdin);
    169.     if (cin.fail()) {
    170.         cin.clear();
    171.         cin.ignore(2000,'\n');
    172.         cerr << "Invalid entry." << endl;
    173.     };
    174.     if(id <= 0) {
    175.         cin.ignore(2000,'\n');
    176.         cerr << "ID must be positive." << endl;
    177.     };
    178.     if(char(cin.get()) != '\n') {
    179.         cin.ignore(2000,'\n');
    180.         cerr << "Trailing characters." << endl;
    181.     };
    182.  
    183.     //width
    184.     cout<<"Width: "; cin>>wid;// fflush(stdin);
    185.     if (cin.fail()) {
    186.         cin.clear();
    187.         cin.ignore(2000,'\n');
    188.         cerr << "Invalid entry." << endl;
    189.     };
    190.     if(wid <= 0) {
    191.         cin.ignore(2000,'\n');
    192.         cerr << "Size must be positive." << endl;
    193.     };
    194.     if(char(cin.get()) != '\n') {
    195.         cin.ignore(2000,'\n');
    196.         cerr << "Trailing characters." << endl;
    197.     };
    198.     //Height
    199.     cout<<"Height: "; cin>>hei;// fflush(stdin);
    200.     if (cin.fail()) {
    201.         cin.clear();
    202.         cin.ignore(2000,'\n');
    203.         cerr << "Invalid entry." << endl;
    204.     };
    205.     if(hei <= 0) {
    206.         cin.ignore(2000,'\n');
    207.         cerr << "Size must be positive." << endl;
    208.     };
    209.     if(char(cin.get()) != '\n') {
    210.         cin.ignore(2000,'\n');
    211.         cerr << "Trailing characters." << endl;
    212.     };
    213. }
    214. void table::display() const {
    215.     cout<<fixed<<right<<setw(10)<<"Curtain"
    216.         <<setw(10) <<"ID: "<<id
    217.         <<setw(10)<<setprecision(2) <<"Size: "<<wid
    218.         <<setw(10) <<"Color: "<<hei<<endl;
    219. }
    220.  
    221. //menu function
    222. int menu()//Display menu for user to choice - menu function
    223. {
    224.     int N;
    225.     cout<<"\n\n-Menu Demo 2-\n";
    226.     cout<<"1: Add a new window.\n";
    227.     cout<<"2: Add a new curtain.\n";
    228.     cout<<"3: Add a new table.\n";
    229.     cout<<"4: Print the list.\n";
    230.     cout<<"Others: Quit.\n";
    231.     cout<<"Select: ";
    232.     cin>>N;
    233.     return N;
    234. }

    Hàm main

    C++ Code:
    1. #include <iostream>
    2. #include <string>
    3. using namespace std;
    4. #include <conio.h>
    5. #include <stdio.h>
    6. #include "Demo.h"
    7.  
    8.  
    9. void main(){
    10.     int n=0;//so du lieu nhap vao
    11.     List* l[20];
    12.  
    13.     int i;
    14.     int choice;
    15.     do
    16.     {
    17.         choice = menu();
    18.         switch(choice)
    19.         {
    20.            
    21.         case 1:
    22.             l=new window();
    23.             l[n]->input();
    24.             n++;
    25.             break;
    26.              
    27.         case 2:
    28.             l=new curtain();
    29.             l[n]->input();
    30.             n++;
    31.             break;
    32.            
    33.         case 3:
    34.             l=new table();
    35.             l[n]->input();
    36.             n++;
    37.             break;
    38.        
    39.         case 4:
    40.             for(i=0;i<n;i++) l[i]->display();
    41.             break;
    42.  
    43.         }
    44.     }
    45.     while(choice == 1 || choice == 2 || choice == 3|| choice == 4);
    46.  
    47.     _getch();
    48. }

    Đây là ảnh lỗi compiler

    Đã được chỉnh sửa lần cuối bởi locmxse60602 : 18-09-2011 lúc 07:09 PM.

  2. #2
    Ngày gia nhập
    07 2010
    Nơi ở
    chỗ kín
    Bài viết
    446

    ở hàm main.

    l=new window();

    l là một con trỏ của con trỏ,
    new window() trả về một con trỏ
    -> không đúng kiểu

    sửa lại l[n]=new window();

    tuơng tự
    l[n]=new curtain();
    l[n]=new table();

Các đề tài tương tự

  1. Trả lời: 5
    Bài viết cuối: 22-11-2012, 11:05 AM
  2. Khắc phục lỗi "Failed to convert parameter value from a String to a Int32"
    Gửi bởi nguyenducbachy trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 3
    Bài viết cuối: 22-08-2012, 10:31 PM
  3. Lỗi"error C2275: 'T' : illegal use of this type as an expression" khi dùng "list<T>::iterator it"
    Gửi bởi doicanhden trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 6
    Bài viết cuối: 19-01-2012, 01:59 AM
  4. Lỗi "Cannot implicitly convert type..." khi đưa data vào Flex Grid
    Gửi bởi nightmare1111 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 11-11-2011, 02:47 PM
  5. Problems : " recover tree " with input as " preorder" and "inorder"
    Gửi bởi HoangManhHa1991 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 13-04-2011, 10:19 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn