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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
smallup
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 19
#1

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

29.11.2015, 12:45. Просмотров 309. Ответов 14
Метки нет (Все метки)

У меня в 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2015, 12:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не получается заполнить vector данными (C++):

Заполнить контейнер map и vector данными из файла - C++
Текстовый файл содержит в себе информацию о пяти лифтах в виде: 12 900 first 10 600 second 15 700 third 20 1000 fourth 16 800...

Заполнить vector алгоритмом accumulate - C++
В книге Скотта Майерса &quot;Эффиктивный STL&quot; рекомендовалось использовать алгоритмы вместо циклов. Из функциональных языков (например haskell)...

Как заполнить vector с клавиатуры? - C++
Доброго времени суток! Пробую реализовать запись элементов в конец вектора. Как ввести в него значения с клавиатуры? Пробовал вот так: ...

Заполнить массив данными - C++
Пишу приложение на OpenGL и С++ записал данные массива в файл int cub; //массив отвечат за расположение коридинат фигуры на плоскости ...

Заполнить данными массис студентов - C++
Я создал структуру, в которой создал функцию заполнения данных. Потом создал массив студентов, и хочу циклически вызывать функцию...

Заполнить массив структур данными с файла - C++
Описать структуру с именем WORKER, содержащую следующие поля: ФИО работника; название занимаемой должности; год поступления на работу....

14
nmcf
5324 / 4644 / 1553
Регистрация: 14.04.2014
Сообщений: 18,479
29.11.2015, 13:49 #2
Вектор нужно по ссылке передавать. У тебя везде копии передаются.
0
smallup
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 19
29.11.2015, 14:14  [ТС] #3
nmcf, но как это сделать ? не совсем понимаю. Не получается сделать так, как с CurPosition,ругается, что неправильный параметр
0
nmcf
5324 / 4644 / 1553
Регистрация: 14.04.2014
Сообщений: 18,479
29.11.2015, 14:16 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
По образцу:
C++
1
void addPosition(vector<Position*> &AllPositions)
1
smallup
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 19
29.11.2015, 15:57  [ТС] #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;
}
Не подскажите, как решить эту проблему ?
0
Миниатюры
Не получается заполнить vector данными  
nmcf
5324 / 4644 / 1553
Регистрация: 14.04.2014
Сообщений: 18,479
29.11.2015, 16:23 #6
Обычным циклом сделай.
0
smallup
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 19
29.11.2015, 16:53  [ТС] #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;
}
0
nmcf
5324 / 4644 / 1553
Регистрация: 14.04.2014
Сообщений: 18,479
29.11.2015, 17:06 #8
А если поля string исключить, с числами работает?
0
smallup
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 19
29.11.2015, 17:09  [ТС] #9
nmcf, да, работает, но выводит другие значение, не те, которые я ввел
0
nmcf
5324 / 4644 / 1553
Регистрация: 14.04.2014
Сообщений: 18,479
29.11.2015, 17:29 #10
Ты это всё одним компилятором делал?
0
smallup
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 19
29.11.2015, 17:34  [ТС] #11
nmcf, да, все в visual studio 15
0
nmcf
5324 / 4644 / 1553
Регистрация: 14.04.2014
Сообщений: 18,479
29.11.2015, 17:40 #12
Актуальную версию покажи.
0
smallup
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 19
29.11.2015, 17:45  [ТС] #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;
}
0
nmcf
5324 / 4644 / 1553
Регистрация: 14.04.2014
Сообщений: 18,479
29.11.2015, 18:08 #14
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ты добавляешь в vector указатели на локальные объекты. Или создавай их через new или храни не указатели, а сами объекты.
1
smallup
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 19
29.11.2015, 18:21  [ТС] #15
nmcf, Спасибо большое! Разобрался, все работает.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2015, 18:21
Привет! Вот еще темы с ответами:

Заполнить структуру данными из бинарного файла - C++
Мне нужно заполнить структуру Note данными из бинарного файла. У меня есть такие структуры: struct Name { string First_Name;//имя ...

Двумерный массив заполнить данными одномерного массива - C++
-Дан двумерный массив из m строк и n столбцов. Заполнить его значениями элементов одномерного массива размеров mxn. Заполнение...

error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Vector<int>::Vector<int>(void)" (?0?$Vector@H@@QAE@XZ) в функции _main - C++
//Vector.h #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;climits&gt; #include &lt;vector&gt; #include &lt;stdlib.h&gt; #include &lt;fstream&gt;...

Заполнить 3-х мерный массив данными, в каждой индексации разное количество - C++
Заполнить 3-х мерный массив данными, в каждой индексации разное количество Добавлено через 1 минуту вот написал, это правильно? : ...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
29.11.2015, 18:21
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru