Проблемы компиляции определения класса C ++ - PullRequest
1 голос
/ 27 февраля 2011

Я осмотрелся и не могу найти ничего, связанного с моей проблемой.Я пытаюсь написать определение класса для класса многоугольника, который в основном имеет вектор, который содержит указатели на точку.Когда я пытаюсь скомпилировать, я продолжаю получать следующие ошибки ...

ошибка C2143: синтаксическая ошибка: отсутствует ';'до «<» ошибка C4430: отсутствует указатель типа - предполагается int.ошибка C2238: неожиданный токен (ы) перед ';'ошибка C2061: синтаксическая ошибка: идентификатор «вектор» ошибка C2065: «myPolygonPoints»: необъявленный идентификатор ошибки C2065: «точки»: необъявленный идентификатор ошибки C2065: «myHasInstersection»: необъявленный идентификатор ошибки C2660: «Polygon :: addSetOfPoints»: функция непринять 1 аргумент </p>

Вот код класса

#include "Point.h"
#include <vector>

class Point;

class Polygon
{
private:
    vector<Point*> myPolygonPoints;
    bool myHasIntersection;

public:
    void addSetOfPoints(vector<Point*> points)
    {
        myPolygonPoints = points;
    }

    bool getHasIntersection()
    {
        return myHasIntersection;
    }

    void setHasIntersection(bool intersection)
    {
        myHasInstersection = intersection;
    }

};

Ответы [ 4 ]

6 голосов
/ 27 февраля 2011

Вы используете vector из пространства имен std, не уточняя его.

Вы должны либо сделать using namespace std;, либо using std::vector, либо объявить все свои vector объекты с пространством имен std, например std::vector.

#include "Point.h"
#include <vector>

class Point; // Assuming Point.h has this declared,
             // you don't need this forward declaration, but in reality,
             // you don't need to include Point.h
             // since you're only declaring pointers to Points

class Polygon
{
private:
    std::vector<Point*> myPolygonPoints;
    bool myHasIntersection;

public:
    void addSetOfPoints(std::vector<Point*> points)
    {
        myPolygonPoints = points;
    }

    bool getHasIntersection()
    {
        return myHasIntersection;
    }

    void setHasIntersection(bool intersection)
    {
        myHasInstersection = intersection;
    }

};
2 голосов
/ 27 февраля 2011

вектор находится в пространстве имен std ::. поэтому вектор не определен в вашем примере кода

Два возможных решения:

#include <vector>
using std::vector;

или: (во всех случаях через код, на который вы ссылаетесь, вектор, объявление и ссылка)

private:
  std::vector<Point*> myPolygonPoints;
public:
  void addSetOfPoints(std::vector<Point*> points)

и т.д.


Третьим решением является следующее:

#include <vector>
using namespace std;

Этот последний, с точки зрения стиля кодирования, я считаю менее предпочтительным. Причина в том, что он импортирует абсолютно все из пространства имен std в пространство имен по умолчанию. В отличие от этого, я считаю, что предпочтительнее явно импортировать фрагменты, которые я использую, потому что это позволяет мне отслеживать, почему мне нужен заголовок. Это не имеет смысла в этом случае (конечно, мне нужно <Vector>, я использую std :: vectors). Это гораздо более актуально в случае, подобном этому:

#include <algorithm>
using std::adjacent_find;

Ах да, вот почему я включил это ...

1 голос
/ 27 февраля 2011

Если вы явно не заявляете, что используете пространство имен std, вам следует указать, к какому из векторов пространства имен принадлежит.

0 голосов
/ 27 февраля 2011

Помимо проблемы std::vector, вы также неправильно набрали переменную myHasIntersection в методе setHasIntersection.

...