Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2010, 14:01   #1
torres
 
Регистрация: 15.04.2010
Сообщений: 6
По умолчанию проблема с push_back

Добрый вечер!
Возникла проблема с использованием вышеуказанной функцией
Код:
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <stdlib.h>
#include <vector>

class Test
{
	typedef std::vector<char*> VC;
	
public:
	VC vc;
	
	Test (Test const& j_src)
		vc(j_src.vc)
	{}
		
	Test& operator=(Test j_src)
	{std::swap(*this,j_src);return*this;}
	
    ~Test() 
     {} 
    
    void MyFunc();
};

void Test :: MyFunc()
{
	char* tmp = "This is a test programm...";
	
	vc.push_back(strdup(tmp));	

}

int main(void)
{
	
	Test *ts;
	
	ts->MyFunc();
	
	return 0;	
}
Может проблема в конструкторе копирования? Тогда какой корректный вариант
torres вне форума Ответить с цитированием
Старый 20.08.2010, 14:20   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так а в чем проблема то?
Кроме того что меня смутил код:
Цитата:
Test (Test const& j_src)
vc(j_src.vc)
{}
и
Цитата:
Test *ts;
Вроде бы ничего такого...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.08.2010, 14:57   #3
torres
 
Регистрация: 15.04.2010
Сообщений: 6
По умолчанию

Код не работоспособный, Segmentation fault. Как раз во время вызова функции добавить в конец.
Test *ts;
Это чисто из эстетических чувств, так больше нравится.

Конструктор не верн, как сделать для вектора? используя for(int i = 0;i<size;i++)...?
torres вне форума Ответить с цитированием
Старый 20.08.2010, 15:00   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот. смотри как бы я написал:
Код:
// jh.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <vector>

class Test
{
	typedef std::vector<char*> VC;

public:
	VC vc;
	Test& operator=(Test j_src)	{std::swap(*this,j_src);return*this;}
    void MyFunc(){
		char* tmp = "This is a test programm...";
		vc.push_back(strdup(tmp));
	}
	int cnt(){return vc.capacity();}
};


int _tmain(int argc, _TCHAR* argv[])
{
	Test *ts=new Test();
	ts->MyFunc();
	printf("%d\n",ts->cnt());
	system("pause");
	return 0;
}
Ой!. Забыл ts после работы освободить...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.08.2010, 15:16   #5
ThisIzGame
Форумчанин
 
Регистрация: 31.08.2009
Сообщений: 161
По умолчанию

дополню сообщение Stilet
Цитата:
Конструктор не верн, как сделать для вектора? используя for(int i = 0;i<size;i++)...?
Цитата:
Test (Test const& j_src)
vc(j_src.vc)
{}
во-первых инициалировать нужно так:
Код:
Test (Test const& j_src) :
		vc(j_src.vc)
	{}
а вектор, можно инициалировать другим вектором таким способом:
Код:
vc(j_src.vc.begin(),j_src.vc.end());
в таком случае вектор vc, будет точной копией вектора j_src.vc.
как-то так
ThisIzGame вне форума Ответить с цитированием
Старый 20.08.2010, 15:24   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
инициалировать нужно так:
Так это инициализация должна была быть?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.08.2010, 15:27   #7
torres
 
Регистрация: 15.04.2010
Сообщений: 6
По умолчанию

большое спасибо!
torres вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37