Имеется класс, полем которого является структура, а один из методов это работа с этой структурой. При инициализации метода ругается на неправильное объявление, не могу понять как исправить. Что нужно написать, чтобы заработал? Спасибо (метод без параметров, выдает указатель на вектор типа структура)
Заголовок класса:
#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();
Но какой смысл скрывать то, что хотите видеть вне класса?
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости