Имеется класс, полем которого является структура, а один из методов это работа с этой структурой. При инициализации метода ругается на неправильное объявление, не могу понять как исправить. Что нужно написать, чтобы заработал? Спасибо (метод без параметров, выдает указатель на вектор типа структура)
Заголовок класса:
#pragma once
#include <vector>
#include <string>
class polygone
{
private:
typedef struct pointXY
{
double x;
double y;
}pole;
public:
polygone();
~polygone();
polygone unn(polygone *pol1, polygone *pol2);
const std::vector<pole*>& polygone::poly() const;
};
Реализация метода:
#include "stdafx.h"
#include "polygone.h"
#include <vector>
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
extern struct pole;
polygone::polygone() {
poly();
}
polygone::~polygone()
{
}
polygone polygone::unn(polygone * pol1, polygone * pol2)
{
return polygone();
}
const std::vector<pole*>& polygone::poly() const{
ifstream file("poly.txt");
vector<string> vals;
vector<pole*> pgn;
pole *polyget = new pole;
if (file.is_open()) {
string s;
int counter1 = 0;
while (getline(file, s, ';'))
{
vals.push_back(s);
}
file.close();
for (int i = 1; i < vals.size(); i += 2) {
polyget->x = atof(vals[i - 1].c_str());
pgn.push_back(polyget);
polyget->y = atof(vals[i].c_str());
pgn.push_back(polyget);
}
}
else {
//cout << "Open error!";
}
return pgn;
}
Ругается вот на эти места, что на картинке:
Достаточно такого объявления внутренней структуры:
class polygone
{
private:
struct pole
{
double x;
double y;
};
public:
polygone();
...
Внутри класса в объявлении не нужно указывать сам класс:
const std::vector<pole*>& poly() const;
Зато вне класса нужно полностью указать имя внутренней структуры:
const std::vector<polygone::pole*>& polygone::poly() const
Объявление не пойми чего
extern struct pole;
не нужно.
И еще - вот тут
const std::vector<polygone::pole*>& polygone::poly() const
вы возвращаете ссылку на локальный объект. Что очень плохо... Вот так лучше:
std::vector<polygone::pole*> polygone::poly() const
Да, и еще - стоит ли делать тип pole
закрытым (private
), если вы планируете с ним работать вне класса? Например, вы не сможете написать
polygone p;
vector<polygone::pole*> s = p.poly();
Правда, все равно сможете написать
polygone p;
auto s = p.poly();
Но какой смысл скрывать то, что хотите видеть вне класса?
Виртуальный выделенный сервер (VDS) становится отличным выбором
Хочу сделать что-то типа джойстика на андроидеЕсть квадратный тип и круглый тип
Ранее я использовал Java 8 , где была включена JavaFXХочу настроить работу JavaFX 11 используя Eclipse
Всем доброго времени сутокПодскажите пожалуйста, почему у меня могла возникнуть следующая проблема: После того, как было собрано и запущено...
Нужно прокликать все ссылки в менюНа странице это выглядит так: