Неопределенная ссылка на мои занятия?C ++ для начинающих - PullRequest
1 голос
/ 14 января 2012

Чтобы немного попрактиковаться с ООП, я пытаюсь создать класс Point (имеет 2 дюйма, x & y) и класс Line (имеет 2 балла).

Теперь, когда я собираюсь создать свой main.cpp, я получаю ошибки типа ..

"неопределенная ссылка на` Point :: Point (float, float) '"и

"неопределенная ссылка на` Line :: Line (Point, Point) '"

Не зная, почему, возможно, вы могли бы кратко взглянуть намои файлы?Было бы очень признательно!

Main.cpp

#include "Point.hpp"
#include "Line.hpp"
#include <iostream>

using namespace std;

int main()
{
    Point p1(2.0f, 8.0f); // should default to (0, 0) as specified
    Point p2(4.0f, 10.0f);  // should override default

    p1.setX(17);


    if ( p1.atOrigin() && p2.atOrigin() )
        cout << "Both points are at origin!" << endl;
    else
    {
        cout << "p1 = ( " << p1.getX() << " , " << p1.getY() << " )" <<endl;
        cout << "p2 = ( " << p2.getX() << " , " << p2.getY() << " )" <<endl;
    }

    Line line(p1, p2);
    Point midpoint = line.midpoint();
    cout << "p1 = ( " << midpoint.getX() << " , " << midpoint.getY() << " )" <<endl;
    return 0;
}

Line.hpp

#ifndef _LINE_HPP_
#define _LINE_HPP_

#include "Point.hpp"

class Line{
public:
    Line(Point p1, Point p2);
    //void setp1(Point p1);
    //void setp2(Point p2);
    //Point getp1 finish

    Point midpoint();
    int length();

private:
    int _length;
    Point _midpoint;
    Point _p1, _p2;
};

#endif

Line.cpp

#include "Line.hpp"
#include <math.h>

Line::Line(Point p1, Point p2) : _p1(p1), _p2(p2)
{
}
Point Line::midpoint()
{
    _midpoint.setX() = (_p1.getX()+ _p2.getX()) /2;
    _midpoint.setY() = (_p1.getY()+ _p2.getY()) /2;
}
int Line::length()
{
    //a^2 + b^2 = c^2

    _length = sqrt( ( (pow( _p2.getX() - _p1.getX(), 2 ))
                     +(pow( _p2.getY() - _p1.getY(), 2 )) ) );
}

Point.hpp

#ifndef _POINT_HPP_
#define _POINT_HPP_

class Point {
public:
    Point( float x = 0, float y = 0);
    float getX() const;
    float getY() const;
    void setX(float x = 0);
    void setY(float y = 0);
    void setXY(float x = 0, float y = 0);
    bool atOrigin() const;

private:
    float _x, _y;

};

#endif

Point.cpp

#include "Point.hpp"

Point::Point(float x, float y) : _x(x), _y(y)
{
}

float Point::getX() const
{
    return _x;
}
float Point::getY() const
{
    return _y;
}
void Point::setX(float x)
{
    //if (x >= 0 &&
    _x = x;
}
void Point::setY(float y)
{
    //might want to check
    _y = y;
}
void Point::setXY(float x , float y )
{
    setX(x);
    setY(y);
}
bool Point::atOrigin() const
{
    if ( _x == 0 && _y == 0)
        return true;

    return false;
}

Ответы [ 2 ]

4 голосов
/ 14 января 2012

В C ++ вам не только нужно компилировать main.cpp, но вы также должны компилировать файлы Line.cpp и Point.cpp. Затем, когда все они скомпилированы в объектные файлы, вы должны связать объектные файлы вместе. Это обрабатывается автоматически некоторыми другими языками, такими как Java.

Точные инструкции о том, как это сделать, будут зависеть от используемой среды разработки.

3 голосов
/ 14 января 2012

Ваш Point.cpp не компилируется и не передается компоновщику, попробуйте включить его в свою сборку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...