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

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

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

Выведение vector-а из функции void*(c++) - C++

18.02.2014, 21:31. Просмотров 373. Ответов 5
Метки нет (Все метки)

Здравствуйте, помогите пожалуйста. Я создаю структуру :
C++
1
2
3
4
5
6
7
8
struct MemoryBlock
    
    {
        size_t offset;
                                                        
        size_t size;
    
    };
далее я создаю вектор, который содержит некоторое кол-во объектов данной структуры :
C++
1
2
3
4
5
6
    vector<MemoryBlock>obj;
    obj.reserve(s);
    for(int i = 0; i<s ; i++){
    
        obj.push_back(MemoryBlock(ob));
}
Далее у меня есть войдовская функция(с указателем)
C++
1
void*func( int s, vector<MemoryBlock>obj, int q)
После чего я в этой функции работаю с вектором и далее мне надо вывести вектор из этой функции и поместить в другую( но не меняя типа функции(т.е используется void*)). Вопрос, как мне это сделать?(чтобы все данные остались целыми)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2014, 21:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выведение vector-а из функции void*(c++) (C++):

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;...

Дважды вычислить значение выражения, используя функции возвращающие void и не void - C++
Хай!Помогите решить Дважды вычислить значение выражения, используя функции возвращающие void и не void....

Создайте класс StringVector, производный от vector<void*> - C++
Создайте класс StringVector, производный от vector&lt;void*&gt;. Переопределите функции push_back() и operator так, чтобы они принимали и...

LNK2019: ссылка на неразрешенный внешний символ "void __cdecl run(void)" (?run@@YAXXZ) в функции _wmain - C++
#include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;cmath&quot; using namespace std; class A { private : double *x; double...

Табулирование функции и выведение результата в таблице.Форматный вывод данных - C++
Привет ребят, вообщем не знаю в чем проблема.Решал пример 4 #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int main() ...

Функции.Зачем нужны void функции? - C++
Здравствуйте люди.Я учусь по книге C++ для чайников.Там объясняют многое про функции.Одного не могу понять.Зачем нужны void функции с...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
18.02.2014, 21:42 #2
C++
1
return new vector<MemoryBlock>(obj);
Sshh
1 / 1 / 0
Регистрация: 17.02.2014
Сообщений: 9
18.02.2014, 22:06  [ТС] #3
Вот примерно то, что я хотел, т.е в функцию siizee я помещаю тот вектор(структурный) и все равно ничего не получается, в 1 функции я присваиваю каждому эл-ту значения 1, а во 2 функции он их обнуляет, в то время , как я хочу, чтобы он их сохранил, т.е во 2 функции выводил все 1 тоже
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
#include "stdafx.h"
#include <iostream>
#include <sstream>
#include <vector>
#include <locale>
#include<iomanip>
using namespace std;
 
struct MemoryBlock
    
    {
        size_t offset;
                                                        
        size_t size;
    
    };
void*func( vector<MemoryBlock>obj){
    for(int i =0; i< 3; i ++){
        obj[i].size=1;
        cout<<obj[i].size<<setw(4);
    }
    cout<<'\n';
    return new vector<MemoryBlock>(obj);
}
void siizee(vector<MemoryBlock>obj){
    cout<<"Size : "<<'\n';
    for(int i =0; i < 3; i++){
        cout<<obj[i].size<<setw(4);
    }
}
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    vector<MemoryBlock>obj;
    MemoryBlock ob;
    ob.size=0;
    ob.offset=0;
 
    for(int i = 0; i<3 ; i++){
    
        obj.push_back(MemoryBlock(ob));
    }
    func(obj);
    siizee(obj);
    return 0;
}
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
18.02.2014, 22:20 #4
Так при чём тут тогда void*, блин? Передавай вектор в функцию по ссылке! А этот дикий void* и return убери!

Добавлено через 2 минуты
C++
1
void func(vector<MemoryBlock>& obj)
Sshh
1 / 1 / 0
Регистрация: 17.02.2014
Сообщений: 9
18.02.2014, 22:31  [ТС] #5
Да, все получилось, спасибо, если вам не сложно, я хотел бы уточнить, т.е когда я передал vector по ссылке, то он из функции напрямую в структуру данные забивал?
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
19.02.2014, 11:11 #6
Цитата Сообщение от Sshh Посмотреть сообщение
то он из функции напрямую в структуру данные забивал?
то аргумент ф-ции не копировался, и если проводились изменения obj внутри ф-ции то они производились и в параметру который Вы передали(vector<MemoryBlock>& obj)в эту -фцию
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2014, 11:11
Привет! Вот еще темы с ответами:

Функции типа void - C++
Добрый вечер, у меня есть проблема, которую я не могу решить. Есть функция типа void. Суть этой функции в том, чтобы печетать некие...

Typedef void (WINAPI *GLEND)(void), как вызывать? - C++
импортирую метод GLEND glmethod = (GLEND) GetProcAddress(hModule, &quot;glEnd&quot;); как его теперь коректно вызвать: typedef void...

Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>) - C++
Написал программу, которая создает вектор 'а' векторов 'b', вектора 'b' содержат 2 числа. Стало интересно, как нужно изменить программу...

Как вводить функции типа void - C++
прошу помощи я полнейший ноль в программировании а в универе ездят этими прогами хоть и не по профилю совсем задание такое вот есть...


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

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

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