C ++程序错误

时间:2010-10-01 03:22:02

标签: c++

我无法解决3个错误。程序实现是正确的但不确定如何摆脱3个错误

# include <iostream.h>
# include < conio.h>
void main() {
    class coord {
        float x;
        float y;
        //Constructor
        coord(float init_x,float init_y) {
            x= init_x;
            y= init_y;
        }
        void set(float f1, float f2) {
            x = f1;
            y = f2;
        }
        float get_x() {return x;}
        float get_y() {return y;}
        virtual void plot() {
            cout<<x;
            cout<<y;
        };
        class 3d_coord: public coord {
            float z;
            //constructor
            3d_coord(float init_x,float init_y,float init_z): coord(init_x,init_y) {
                z= init_z;
            }
            void set(float f1,float f2,float f3) {
                coord::set(f1, f2); z = f3;
            }
            float get_z() {  return z; }

            virtual void plot() { 
                coord::plot();
                cout<<z;
            };

            int test
            void *ptr;

            cin>>test;
            coord a(1.1, 2.2);
            3d_coord b(3.0, 4.0, 5.0);
            if (test)
                ptr = &a;
            else
                    ptr = &b;
            ptr-> plot();
        }
    }

4 个答案:

答案 0 :(得分:6)

我至少可以发现三个错误:

  1. 标准库标题为<iostream>,而不是<iostream.h><conio.h>不是C ++标准库头文件,最好避免使用。

  2. main()必须返回int,而不是void

  3. 标准库名称(例如cout)位于std命名空间中;你需要对它们进行鉴定。

  4. 由于您没有说明要解决哪些错误,我不知道这些错误是否存在,但它们仍然是三个错误。以防万一,这里有一些奖金错误:

    • 3d_coord不是有效的类名;类名必须是标识符,这意味着它必须以字母或下划线开头,而不是数字。

    • 您不应该使用继承来关联coord3d_coord(或者您在确定奖励错误编号1后选择的任何名称)。三维坐标不是二维坐标,即使它们共享两个共同的成员。继承应该用于 is-a 关系。

    • 从流中提取数据(在本例中为cin)后,必须进行测试以确保提取成功。

    • ptr的类型为void*;你不能通过void*调用成员函数(很少有时候在C ++程序中使用void*是个好主意。)

    • 这不是一个真正的错误,但通常你不会在函数内部定义类(例如,有例外;仿函数)。

答案 1 :(得分:0)

您没有将类定义放在main函数中,也没有将3d_coord类放在coord类中。

答案 2 :(得分:0)

我可以发现一个:

void *ptr;
...
ptr-> plot(); // void::plot() is not

答案 3 :(得分:0)

            cin>>test;
            coord a(1.1, 2.2);
            3d_coord b(3.0, 4.0, 5.0);
            if (test)
                ptr = &a;
            else
                    ptr = &b;
            ptr-> plot();

似乎不是一个功能...