Форум программистов, компьютерный форум CyberForum.ru

Не получается заполнить vector данными - C++

Восстановить пароль Регистрация
 
smallup
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 19
29.11.2015, 12:45     Не получается заполнить vector данными #1
У меня в dll есть следующий класс. В main я пытаюсь создать вектор и заполнить его данными, обратившись к методам класса из длл. Данные я ввожу, но ничего не выводит. Помогите, в чем проблема ?
Если сделать без указателей, то появляется куча ошибок типа
"unresolved external symbol __declspec(dllimport) public __thiscall ".

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//position.h
#pragma once
 
#ifdef POSITIONDLL_EXPORTS
#define POSITIONDLL_API __declspec(dllexport) 
#else
#define POSITIONDLL_API __declspec(dllimport) 
#endif
 
#include "stdafx.h"
 
class POSITIONDLL_API Position
    {
    private:
        string positionName;
        string duties;
        int hoursOfWork;
        double salary;
    public:
        Position();
        ~Position();
        void addPosition(Position *CurPosition, vector<Position*> AllPositions); //если тут убрать указатели, то ошибки unresolved external symbol __declspec(dllimport) public __thiscall
 
        void setPosName(string CurPosName);
        void setDuties(string CurDuties);
        void setHoursOfWork(int CurHoursOfWork);
        void setSalary(double CurSalary);
 
        string getPosName();
        string getDuties();
        int getHoursOfWork();
        double getSalary();
    };
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//position.cpp
#include "stdafx.h"
#include "Position.h"
Position::Position() {
 
}
 
Position::~Position() {
 
}
 
void Position::addPosition(Position *CurPosition, vector<Position*> AllPositions) {
    AllPositions.push_back(CurPosition);
}
 
void Position::setPosName(string CurPosName) {
    this->positionName = CurPosName;
}
 
void Position::setDuties(string CurDuties) {
    this->duties = CurDuties;
}
 
void Position::setHoursOfWork(int CurHoursOfWork) {
    this->hoursOfWork = CurHoursOfWork;
}
 
void Position::setSalary(double CurSalary) {
    this->salary = CurSalary;
}
 
string Position::getPosName() {
    return positionName;
}
 
string Position::getDuties() {
    return duties;
}
 
int Position::getHoursOfWork() {
    return hoursOfWork;
}
 
double Position::getSalary() {
    return salary;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//main.cpp
#include "stdafx.h"
#include "Position.h"
 
void addPosition(vector<Position*> AllPositions) {
    Position CurPosition;
    string PosName;
    string duties;
    int hoursOfWork;
    double salary;
    cout << "Введите название должности " << endl;
    cin >> PosName;
    CurPosition.setPosName(PosName);
    cout << "Введите обязанности должности " << endl;
    cin.ignore(cin.rdbuf()->in_avail());
    getline(cin, duties);
    CurPosition.setDuties(duties);
    cout << " Введите количество рабочих часов в неделю " << endl;
    cin >> hoursOfWork;
    CurPosition.setHoursOfWork(hoursOfWork);
    cout << " Введите зарплату данной должности " << endl;
    cin >> salary;
    CurPosition.setSalary(salary);
    CurPosition.addPosition(&CurPosition, AllPositions);
}
 
void ShowAllPos(vector <Position*> AllPos) {
    for (int i = 0; i < AllPos.size(); ++i) {
        cout << AllPos[i]->getPosName() << endl;
        cout << AllPos[i]->getDuties() << endl;
        cout << AllPos[i]->getHoursOfWork() << endl;
        cout << AllPos[i]->getSalary() << endl;
    }
}
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    vector <Position*> AllPos;
    addPosition(AllPos);
    ShowAllPos(AllPos);
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4311 / 3732 / 1258
Регистрация: 14.04.2014
Сообщений: 14,635
29.11.2015, 13:49     Не получается заполнить vector данными #2
Вектор нужно по ссылке передавать. У тебя везде копии передаются.
smallup
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 19
29.11.2015, 14:14  [ТС]     Не получается заполнить vector данными #3
nmcf, но как это сделать ? не совсем понимаю. Не получается сделать так, как с CurPosition,ругается, что неправильный параметр
nmcf
4311 / 3732 / 1258
Регистрация: 14.04.2014
Сообщений: 14,635
29.11.2015, 14:16     Не получается заполнить vector данными #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
По образцу:
C++
1
void addPosition(vector<Position*> &AllPositions)
smallup
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 19
29.11.2015, 15:57  [ТС]     Не получается заполнить vector данными #5
nmcf, Спасибо большое, вектор заполняется
Но теперь проблема с выводом.Переделал функцию вывода. Пробовал разные варианты, это единственный вариант, который компилится, но когда доходит программа до вывода, то вылетает ошибка

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void ShowAllPos(Position* CurPos ) {
        cout << CurPos->getPosName() << endl;
        cout << CurPos->getDuties() << endl;
        cout << CurPos->getHoursOfWork() << endl;
        cout << CurPos->getSalary() << endl;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    vector <Position*> AllPos;
    addPosition(AllPos);
 
    //ShowAllPos(AllPos);
    cout << AllPos.size() << endl;
    for_each(AllPos.begin(), AllPos.end(), ShowAllPos);
 
    return 0;
}
Не подскажите, как решить эту проблему ?
Миниатюры
Не получается заполнить vector данными  
nmcf
4311 / 3732 / 1258
Регистрация: 14.04.2014
Сообщений: 14,635
29.11.2015, 16:23     Не получается заполнить vector данными #6
Обычным циклом сделай.
smallup
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 19
29.11.2015, 16:53  [ТС]     Не получается заполнить vector данными #7
nmcf, обычным циклом точно такая же ошибка, после вывода размера вектора вылетает программа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void ShowAllPos(vector <Position*> &AllPos) {
    for (int i = 0; i < AllPos.size(); i++) {
        cout << AllPos[i]->getPosName() << endl;
        cout << AllPos[i]->getDuties() << endl;
        cout << AllPos[i]->getHoursOfWork() << endl;
        cout << AllPos[i]->getSalary() << endl;
    }
}
int main()
{
    setlocale(LC_ALL, "Russian");
    vector <Position*> AllPos;
    addPosition(AllPos);
    addPosition(AllPos);
    cout <<" size vector "<< AllPos.size() << endl;
 
    ShowAllPos(AllPos);
 
    return 0;
}
nmcf
4311 / 3732 / 1258
Регистрация: 14.04.2014
Сообщений: 14,635
29.11.2015, 17:06     Не получается заполнить vector данными #8
А если поля string исключить, с числами работает?
smallup
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 19
29.11.2015, 17:09  [ТС]     Не получается заполнить vector данными #9
nmcf, да, работает, но выводит другие значение, не те, которые я ввел
nmcf
4311 / 3732 / 1258
Регистрация: 14.04.2014
Сообщений: 14,635
29.11.2015, 17:29     Не получается заполнить vector данными #10
Ты это всё одним компилятором делал?
smallup
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 19
29.11.2015, 17:34  [ТС]     Не получается заполнить vector данными #11
nmcf, да, все в visual studio 15
nmcf
4311 / 3732 / 1258
Регистрация: 14.04.2014
Сообщений: 14,635
29.11.2015, 17:40     Не получается заполнить vector данными #12
Актуальную версию покажи.
smallup
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 19
29.11.2015, 17:45  [ТС]     Не получается заполнить vector данными #13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//Position.h
#pragma once
 
#ifdef POSITIONDLL_EXPORTS
#define POSITIONDLL_API __declspec(dllexport) 
#else
#define POSITIONDLL_API __declspec(dllimport) 
#endif
 
#include "stdafx.h"
 
class POSITIONDLL_API Position
    {
    private:
        string positionName;
        string duties;
        int hoursOfWork;
        double salary;
    public:
        Position();
        ~Position();
        void addPosition(Position* CurPosition, vector<Position*> &AllPositions);
                Position changePosition();
        void showTopPositions();
        void showTopWorkersOnThisPosition();
 
        void setPosName(string CurPosName);
        void setDuties(string CurDuties);
        void setHoursOfWork(int CurHoursOfWork);
        void setSalary(double CurSalary);
 
        string getPosName();
        string getDuties();
        int getHoursOfWork();
        double getSalary();
    };
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//Position.cpp
#include "stdafx.h"
#include "Position.h"
Position::Position() {
 
}
 
Position::~Position() {
 
}
 
void Position::addPosition(Position *CurPosition, vector<Position*> &AllPositions) {
    AllPositions.push_back(CurPosition);
}
 
void Position::setPosName(string CurPosName) {
    this->positionName = CurPosName;
}
 
void Position::setDuties(string CurDuties) {
    this->duties = CurDuties;
}
 
void Position::setHoursOfWork(int CurHoursOfWork) {
    this->hoursOfWork = CurHoursOfWork;
}
 
void Position::setSalary(double CurSalary) {
    this->salary = CurSalary;
}
 
string Position::getPosName() {
    return positionName;
}
 
string Position::getDuties() {
    return duties;
}
 
int Position::getHoursOfWork() {
    return hoursOfWork;
}
 
double Position::getSalary() {
    return salary;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//main.cpp
// MyProgDll.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include "Position.h"
 
void addPosition(vector<Position*> &AllPositions) { 
    Position CurPosition;
    string PosName;
    string duties;
    int hoursOfWork;
    double salary;
    cout << "Введите название должности " << endl;
    cin >> PosName;
    CurPosition.setPosName(PosName);
    cout << "Введите обязанности должности " << endl;
    cin.ignore(cin.rdbuf()->in_avail());
    getline(cin, duties);
    CurPosition.setDuties(duties);
    cout << " Введите количество рабочих часов в неделю " << endl;
    cin >> hoursOfWork;
    CurPosition.setHoursOfWork(hoursOfWork);
    cout << " Введите зарплату данной должности " << endl;
    cin >> salary;
    CurPosition.setSalary(salary);
    CurPosition.addPosition( &CurPosition, AllPositions);
}
 
void ShowAllPos(vector <Position*> AllPos) {
    for (int i = 0; i < AllPos.size(); i++) {
        //cout << AllPos[i]->getPosName() << endl;
        //cout << AllPos[i]->getDuties() << endl;
        cout << AllPos[i]->getHoursOfWork() << endl;
        cout << AllPos[i]->getSalary() << endl;
    }
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    vector <Position*> AllPos;
    addPosition(AllPos);
    addPosition(AllPos);
    cout <<" size vector "<< AllPos.size() << endl;
 
    ShowAllPos(AllPos);
 
    return 0;
}
nmcf
4311 / 3732 / 1258
Регистрация: 14.04.2014
Сообщений: 14,635
29.11.2015, 18:08     Не получается заполнить vector данными #14
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ты добавляешь в vector указатели на локальные объекты. Или создавай их через new или храни не указатели, а сами объекты.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2015, 18:21     Не получается заполнить vector данными
Еще ссылки по теме:

C++ Заполнить 3-х мерный массив данными, в каждой индексации разное количество
Заполнить массив данными C++
Как заполнить vector с клавиатуры? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
smallup
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 19
29.11.2015, 18:21  [ТС]     Не получается заполнить vector данными #15
nmcf, Спасибо большое! Разобрался, все работает.
Yandex
Объявления
29.11.2015, 18:21     Не получается заполнить vector данными
Ответ Создать тему
Опции темы

Текущее время: 19:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru