我无法得到这个代码来编译 - 为了一个赋值(见代码后的注释)

时间:2013-11-13 14:35:59

标签: c++ visual-c++ c++11

我正在使用MSVS2013。 'Point'对象在Rectangle.h文件中生成错误。就我而言,这就是我的意思。 (我已经标记了显示错误的行:“/ **<< --- HERE ** /”)我已经在类语法中对类进行了多次搜索,但我要么错了是否有问题。

THX,   Mark L.(你们应该在底部的列表中添加一个“newb”标签)

// Ch9.DRAFT-Point.h
#ifndef POINT_H
#define POINT_H

class Point
{
public:
    Point(double = 0.0, double = 0.0); // constructor

    //set functions & get functions
    void setX(double); 
    void setY(double);
    double getX();
    double getY();
private:
    double x; // 0.0 <= x <= 20
    double y; // 0.0 <= y <= 20
}; //end class Point

#endif

//  end Point.h
///////////////////////////////////////////////////////////////////////

/** THIS FILE IS THE PROBLEM **/
/** the object 'Point' is causing errors **/

// Ch9.DRAFT-Rectangle.h
#ifndef RECTANGLE_H
#define RECTANGLE_H

#include "Point.h"

class Rectangle 
{
public:
    // default constructor
    Rectangle(Point = Point(0.0,1.0), Point(1.0,1.0), /** <<<---HERE**/
        Point(1.0,0.0), Point(0.0,0.0));    /** <<<---AND HERE**/

    // set x, y, x2, y2 coordinates
    void setCoord(Point, Point, Point, Point);  /** <<<---AND HERE**/
    double length(); // length
    double width(); // width
    void  perimeter(); // perimeter
    void area(); // area
    bool square(); // square
private:
    Point point1;   /**  <<<---AND HERE**/
    Point point2;   /**  <<<---AND HERE**/
    Point point3;   /**  <<<---AND HERE**/
    Point point4;   /**  <<<---AND HERE**/
}; // end class Rectangle

#endif

//  end Rectangle.h
///////////////////////////////////////////////////////////////////////

// Ch9.DRAFT-Point.cpp
// Member function definitions for class Point

#include "Ch9.DRAFT-Point.h"

Point::Point(double xCoord, double yCoord)
{
    setX(xCoord); // functio setX()
    setY(yCoord); // functio setY()
} // end Point constructor

// set x coordinate
void Point::setX(double xCoord)
{
    x = (xCoord >= 0.0 && xCoord <= 20.0) ? xCoord : 0.0;
} // end setX()

// set y coordinate
void Point::setY(double yCoord)
{
    y = (yCoord >= 0.0 && yCoord <= 20.0) ? yCoord : 0.0;
} // end setY()

// return x coodinate
double Point::getX()
{
    return x;
} //end getX()

// return y coodinate
double Point::getY()
{
    return y;
} //end getY()

//  end Point.cpp
///////////////////////////////////////////////////////////////////////

// Ch9.DRAFT-Rectangle.cpp
// Member-function definitions for class Rectangle.
#include <iostream>
#include <iomanip>
#include <cmath>
#include "Rectangle.h"
using namespace std;

Rectangle::Rectangle(Point a, Point b, Point c, Point d)
{
    setCoord(a, b, c, d); // function setCoord()
} // end Rectangle constructor

void Rectangle::setCoord(Point p1, Point p2, Point p3, Point p4)
{
    // verify rectangle formed
    if((p1.getY() == p2.getY() && p1.getX() == p4.getX()
    p2.getX() == p3.getX() && p3.getY() == p4.getY()))
    {
        point1 = p1;
        point2 = p2;
        point3 = p3;
        point4 = p4;
    } // end if
    else
    {
        cout<< "Coordinates do not form a rectangle!\n"
        << "Use default values.\n";
        point1 = Point(0.0,1.0);
        point2 = Point(1.0,1.0);
        point3 = Point(1.0,0.0);
        point4 = Point(0.0,0.0);
    } // end else
} // setCoord()

void Rectangle::length( ) 
{ 
    double side1 = fabs(point4.getY() - point1.getY()); // get side1
    double side2 = fabs(point2.getX() - point1.getX()); // get side2
    double length = (side1 < side2 ? side1 : side2);
    return length;
} // end length()

void Rectangle::width( ) 
{ 
    double side1 = fabs(point4.getY() - point1.getY()); // get side1
    double side2 = fabs(point2.getX() - point1.getX()); // get side2
    double width = (side1 < side2 ? side1 : side2);
    return width;
} // end width()

void Rectangle::perimeter() 
{ 
    cout << fixed << "\nThe perimeter is " << setprecision(1)
        << 2 * (length() + width()) << endl;
} // end perimeter()

void Rectangle::area() 
{ 
    cout << fixed << "\nThe area is " << setprecision(1)
        << (length() * width()) << endl;
} // end area()

bool Rectangle::square()
{
    return (fabs(point4.getY() - point1.getY()) ==
    fabs(point2.getX() - point1.getX());
} // end square()

//  end Rectangle.cpp
///////////////////////////////////////////////////////////////////////

// Ch9.DRAFT-Ex09_11.cpp
#include <iostream> 
#include "Rectangle.h" // include definition of class Rectangle
using namespace std;


int main()
{
    Point w(1.0,1.0);
    Point x(5.0,1.0);
    Point y(5.0,3.0);
    Point z(1.0,3.0);
    Point j(0.0,0.0);
    Point k(1.0,0.0);
    Point m(1.0,1.0);
    Point n(0.0,1.0);
    Point v(99.0,-2.3);

    Rectangle rectangles[4]; // array of 4 rectangles

    // output rectangles
    for(int i = 0; i < 4; i++)
    {
        cout << "Rectangle" << i + 1 << ":\n";

        switch (i) // init 4 rectangles
        {
            case 0: // 1st rectangle
                rectangles[i] = Rectangle(z, y, x, w);
                break;
            case 1: // 2nd rectangle
                rectangles[i] = Rectangle(j, k, m, n);
                break;
            case 2: // 3rd rectangle
                rectangles[i] = Rectangle(w, x, m, n);
                break;
            case 3: // 4th rectangle
                rectangles[i] = Rectangle(v, x, y, z);
                break;
        } // end switch

        cout << "length = " << rectangles[i].length();
        cout << "\nwidth = " << rectangles[i].width();
        rectangles[i].perimeter();
        rectangles[i].area();
        cout << "The rectangle " 
            << (rectangles[i].square() ? "is" : "is not")
            << "a square.\n";
    } // end for

    return 0;
} // end main

//  end Ex09_11.cpp
///////////////////////////////////////////////////////////////////////



/**********************************************************************
Chapter 09 exercise instructions:
Do exercise 9.12 on page 429 for 100 points.
This exercise makes a reference to Exercise 9.11. Here is the code for Exercise 9.11: Ex09_11.zip
DO NOT click drag the code into your new project. The code MUST be copied and pasted into new .h/.cpp files which you create. If you drag copy code into your project and then send it to me it probably will not contain that code!! This means you WILL have a rectangle class (Rectangle.h and Rectangle.cpp) and a file called Ex09_11.cpp that has your main function.
Before submitting your project check your archive and be sure it contains your .h and .cpp files.
I will be looking for the following in your program.
*Your program MUST use Cartesian coordinates (x and y coordinates for a total of eight coordinates per figure, each corner of your rectangle is an x,y coordinate). This is a major modification of the supplied code.
*You must follow my previous instructions regarding how to start your program. What you are doing is editing the supplied code so instead of the class Rectangle using width and length it will use cartesian coordinates as defined above.
*Do not have the user enter the coordinates. Hard code them into your program.
*You must include a default constructor for the rectangle class. The default constructor should have the following coordinates ( point 1:(0,0), point 2:(0,1), point 3:(1,1), point 4:(1,0). Be sure the constructor has the set function as described in the textbook assignment. I recommend you pass these points as eight integers (0,0,0,1,1,1,1,0).
*Your program must instantiate four objects of the Rectangle class.
•Your first object should not form a square using your supplied coordinates.
•Your second object should form a square using your coordinates.
•Your third object should should not be instantiated with any points allowing your default constructor points to be used
Hint: Remember that your constructor header can contain default values. If you create an object without passing values those default values will be used. See example program in chapter.
•Your fourth object should not form a rectangle and the default coordinates should replace your original coordinates.
The textbook assignment asks for a set function that tests if any coordinates are over 20. You do not have to write that function.
Do include a function that gets called to check if your coordinates form a square or rectangle as mentioned in the textbook assignment.
Keep your code simple. To decide if the rectangle is a square compare its height verses width.You choose which points and values to compare. If length = width is a square.
This is a programming project intended to show that you know how to program functions and understand constructors..
Review my supplied image of the program's output as a guide.
If you submit the code that I am supplying you will receive zero points.
*AGAIN, do not have the user make the coordinate entries. Code it into the program.
 **************************************************************************/

3 个答案:

答案 0 :(得分:1)

以下代码对我来说是错误的。

// default constructor
Rectangle(Point = Point(0.0,1.0), Point(1.0,1.0), /** <<<---HERE**/
    Point(1.0,0.0), Point(0.0,0.0));    /** <<<---AND HERE**/

<强>尝试:

// default constructor
Rectangle(Point a = Point(0.0,1.0), Point b = Point(1.0,1.0),
    Point c = Point(1.0,0.0), Point d = Point(0.0,0.0));

答案 1 :(得分:1)

这不是语法正确的......

Rectangle(Point = Point(0.0,1.0), Point(1.0,1.0), /** <<<---HERE**/
        Point(1.0,0.0), Point(0.0,0.0));    /** <<<---AND HERE**/

这样会更好(请指出你的参数)

Rectangle(Point first = Point(0.0,1.0), Point second = Point(1.0,1.0), Point third = Point(1.0,0.0), Point fourth = Point(0.0,0.0));
BTW,看到最后的评论,似乎表明你不理解该项目的目标:)

  

这是一个旨在表明你知道如何做的编程项目   程序功能和理解构造函数..

答案 2 :(得分:0)

This is a programming project intended to show that you know how to program functions and understand constructors..

注意you know how to... NOT the stack overflow community knows how to

请求错误消息的帮助不要只发布所有代码并询问什么是错误的

但是试着看一些关于构造函数和初始化的C ++教程