Запутался в "указателях на указатели"
Модератор: Fastman
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- проходил мимо
- Сообщения: 11620
- Зарегистрирован: 2008-02-21 18:15:41
Re: Запутался в "указателях на указатели"
ну тык new аля обьект и добавляешь в new массив
вообщем тема долгая
я тебя о другом просил
пример кода немного не соответсвтует тому что ты говоришь
ты приводил много кода
а в итоге все проигнорировал
а парсер самый лучший flexx & бизон
вообщем тема долгая
я тебя о другом просил
пример кода немного не соответсвтует тому что ты говоришь
ты приводил много кода
а в итоге все проигнорировал
а парсер самый лучший flexx & бизон
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
-
- сержант
- Сообщения: 220
- Зарегистрирован: 2007-05-11 14:39:01
- Откуда: Отсюда :)
Re: Запутался в "указателях на указатели"
2paradox
с new понятно и так было, вопрос был как уложить. Ладно проехали.
Видимо приведённый код был "мыслями вслух". Может чего и не договорил...
А вот с парсером. Про flex & bison сейчас читаю.
с new понятно и так было, вопрос был как уложить. Ладно проехали.
Видимо приведённый код был "мыслями вслух". Может чего и не договорил...
А вот с парсером. Про flex & bison сейчас читаю.
---
"Если я рассуждаю логично, то это значит только то, что я не сумашедший, но вовсе не доказывает, что я прав" (с)И.П.Павлов
"Если я рассуждаю логично, то это значит только то, что я не сумашедший, но вовсе не доказывает, что я прав" (с)И.П.Павлов
- Fastman
- ст. лейтенант
- Сообщения: 1236
- Зарегистрирован: 2006-07-07 10:20:38
- Откуда: Минск. РБ
Re: Запутался в "указателях на указатели"
Добрался до рабочего места, вот я прикинул что если правильно понял все, можно ка кто так сделать примерно.
Если это то что я подумал и это потащит для задачи - покажу как классы остальные реализованы
Выхлоп:
Если это то что я подумал и это потащит для задачи - покажу как классы остальные реализованы
Код: Выделить всё
#include "Collector.h"
#include "Parent.h"
#include <vector>
#include <utility>
#include <iostream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
vector< pair<CParent , vector<CCollector>> > V3D;
//Руками эмулируем наполнение и создание обьектов.
//Если ввод из файла будет - тупо цикл внесения обьектов будет.
//------------------------------------------------------------------
CParent *BOX1;
BOX1 = new CParent(1,2,3,"OBJ1");
CParent *BOX2;
BOX2 = new CParent(4,5,6,"OBJ2");
vector<CCollector> vChildsVector;
vector<CCollector> vChildsVector2;
CCollector *cCls;
cCls = new CCollector;
cCls->m_pBox = new CBox(2, 4, 5, "BOX IN OBJ1");
cCls->m_pShape = new CShape(6, 7, 8, "SHAPE IN OBJ1");
vChildsVector.push_back(*cCls);
CCollector *cCls2;
cCls2 = new CCollector;
cCls2->m_pShape = new CShape(10, 15, 20, "SHAPE IN OBJ2");
vChildsVector2.push_back(*cCls2);
pair<CParent , vector<CCollector>> pPair (*BOX1, vChildsVector);
pair<CParent , vector<CCollector>> pPair2(*BOX2,vChildsVector2);
V3D.push_back(pPair);
V3D.push_back(pPair2);
//------------------------------------------------------------------
//Рисуем чего у нас получилось
for (int it = 0; it < (int)V3D.size(); it++)
{
//Выводим верхний элемент
cout << " " << endl;
V3D.at(it).first.GetParam();
//Если у него есть чилды - рисуем их
if(!V3D.at(it).second.empty())
{
for(int it2 = 0; it2 < (int)V3D.at(it).second.size(); it2++)
{
CCollector CollectionOfChild;
CollectionOfChild = V3D.at(it).second.at(it2);
cout << "|" << endl;
if(CollectionOfChild.m_pBox != NULL)
CollectionOfChild.m_pBox->BoxParam();
if(CollectionOfChild.m_pShape != NULL)
CollectionOfChild.m_pShape->ShapeParam();
}
}
}
if (BOX1 != NULL)
delete BOX1;
if (BOX2 != NULL)
delete BOX2;
if (cCls !=NULL)
delete cCls;
if (cCls2 !=NULL)
delete cCls2;
return 0;
}
- Вложения
-
- c.PNG (3.64 КБ) 2714 просмотров
Главное в жизни здоровье и любовь, остальное я все куплю.
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: Запутался в "указателях на указатели"
я извиняюсь, но указатели в некотроых случаях для убыстрения или нет?
если надо например, некоторые элементы переместить с одного массива в другой, то при перенесении переносится только ссылка, а не настоящие элементы! правильно?
если надо например, некоторые элементы переместить с одного массива в другой, то при перенесении переносится только ссылка, а не настоящие элементы! правильно?
- Fastman
- ст. лейтенант
- Сообщения: 1236
- Зарегистрирован: 2006-07-07 10:20:38
- Откуда: Минск. РБ
Re: Запутался в "указателях на указатели"
А причем тут убыстрениеProFTP писал(а):я извиняюсь, но указатели в некотроых случаях для убыстрения или нет?
если надо например, некоторые элементы переместить с одного массива в другой, то при перенесении переносится только ссылка, а не мастоящий элементы! правильно?

юзать удобно:
-если есть объект, который нельзя или затруднительно копировать.
-инициалуизирется объекты в неопределенный заранее момент
- надо создать заранее неизвестное количество объектов
- полиморфизм
- функция может менять аргумент(лучше ссылка а не указатель)
Главное в жизни здоровье и любовь, остальное я все куплю.
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: Запутался в "указателях на указатели"
там где не надо использовать указатели, то там их не использовать?
ну вот везде говорят что указатели быстре и на разных языках...
http://www.google.com.ua/search?q=%D1%8 ... rt=30&sa=N
http://www.relib.com/forums/Topic820817 ... x#bm821448
http://no-gritzko-here.livejournal.com/3725.html
http://www.realcoding.net/article/view/1094
http://www.xakep.ru/post/21539/?print=true
http://rtfm.adamant.net/programming/ker ... ode70.html
ну вот везде говорят что указатели быстре и на разных языках...
http://www.google.com.ua/search?q=%D1%8 ... rt=30&sa=N
http://www.relib.com/forums/Topic820817 ... x#bm821448
http://no-gritzko-here.livejournal.com/3725.html
http://www.realcoding.net/article/view/1094
http://www.xakep.ru/post/21539/?print=true
http://rtfm.adamant.net/programming/ker ... ode70.html
-
- проходил мимо
- Сообщения: 11620
- Зарегистрирован: 2008-02-21 18:15:41
Re: Запутался в "указателях на указатели"
так ProFTP
ты не сяшник) так что не флуди
ты не сяшник) так что не флуди
- Fastman
- ст. лейтенант
- Сообщения: 1236
- Зарегистрирован: 2006-07-07 10:20:38
- Откуда: Минск. РБ
Re: Запутался в "указателях на указатели"
Не слушай бред. в java нет допустим указателей.ProFTP писал(а):там где не надо использовать указатели, то там их не использовать?
ну вот везде говорят что указатели быстре и на разных языках...
Указатели - грубо говоря: механизм работы с памятью.
Главное в жизни здоровье и любовь, остальное я все куплю.
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: Запутался в "указателях на указатели"
не сишник, но в предкомпиляции может буду писать для ускорения работы прогарммы!paradox писал(а):так ProFTP
ты не сяшник) так что не флуди
-
- проходил мимо
- Сообщения: 11620
- Зарегистрирован: 2008-02-21 18:15:41
Re: Запутался в "указателях на указатели"
кого кого ты будешь писать? O_o
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: Запутался в "указателях на указатели"
для ускорения работы программы можно прямо в ней писать на Си и на других языках через JIT
вот еще увидел Qt4 надо будет разобратся, попробовать http://www.opennet.ru/base/dev/cpp_perl_class.txt.html
вот еще увидел Qt4 надо будет разобратся, попробовать http://www.opennet.ru/base/dev/cpp_perl_class.txt.html
-
- проходил мимо
- Сообщения: 11620
- Зарегистрирован: 2008-02-21 18:15:41
Re: Запутался в "указателях на указатели"
это просто пипец дочего извратилиProFTP писал(а):для ускорения работы программы можно прямо в ней писать на Си и на других языках через JIT
вот еще увидел Qt4 надо будет разобратся, попробовать http://www.opennet.ru/base/dev/cpp_perl_class.txt.html
лучше из перла никакого С++ не трогать ))))
- Fastman
- ст. лейтенант
- Сообщения: 1236
- Зарегистрирован: 2006-07-07 10:20:38
- Откуда: Минск. РБ
Re: Запутался в "указателях на указатели"
Я тоже не выдержу и откомменчу.ProFTP писал(а):для ускорения работы программы можно прямо в ней писать на Си и на других языках через JIT
вот еще увидел Qt4 надо будет разобратся, попробовать http://www.opennet.ru/base/dev/cpp_perl_class.txt.html
Не майся дурью..не скрещивай технологии которые все равно работать вместе не будут.
Твой мозг мне не жалко.. Жалко будет наш мозг если у тебя вопросы по этому говну появятся.
P.S.
Ну что за народ пошел... ну почему просто нельзя принцип KISS юзать и не трахать себе мозг.
Главное в жизни здоровье и любовь, остальное я все куплю.
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: Запутался в "указателях на указатели"
спасибо, хорошо, я не про qt спрашивал, вообще-то...
-
- сержант
- Сообщения: 220
- Зарегистрирован: 2007-05-11 14:39:01
- Откуда: Отсюда :)
Re: Запутался в "указателях на указатели"
2fastman
Интересно, но не слишком сложно для моего случая?
pBox и pShape у тебя разные поля класса?
Не знаю будет ли проще у меня, но хотелось сделать что-то вроде:
Вроде не так сложно...
Кстати никак не найду какого-нибудь внятного примера как парсером flexx&bison пользоваться.
Нужно всего лишь вложенные скобки вывернуть наизнанку, чтобы сначала чилд шёл, а за ним парент.
Интересно, но не слишком сложно для моего случая?
pBox и pShape у тебя разные поля класса?
Не знаю будет ли проще у меня, но хотелось сделать что-то вроде:
Код: Выделить всё
#define doidPointLight 6 // light information
class dataObject {
public:
int iId;
char *name;
dataObject *next, *data;
...
}
class doPointLight : public dataObject {
public:
float intensity, color[3], location[3], radius;
bool on;
...
}
// и т.д.
// где-нибудь в коде:
dataObject *sceneObjects;
// наполнение по принципу однонаправленного списка юзая *next
// всё что внутри (включая чилдов) юзаю *data
// теперь, чтобы всё это выкопать
dataObject *z = dataObjects;
doPointLight *pl; // это времянка, чтобы много текста в коде не писать
switch (z->iId) {
case doidPointLight:
pl = (doPointLight*)z;
if ( pl->on ) { /* что-то делаем */ }
...
// если будут чилды
if ( !pl->data ) {
// так же разыменовываем чилды
}
break;
...
}
Кстати никак не найду какого-нибудь внятного примера как парсером flexx&bison пользоваться.
Нужно всего лишь вложенные скобки вывернуть наизнанку, чтобы сначала чилд шёл, а за ним парент.
---
"Если я рассуждаю логично, то это значит только то, что я не сумашедший, но вовсе не доказывает, что я прав" (с)И.П.Павлов
"Если я рассуждаю логично, то это значит только то, что я не сумашедший, но вовсе не доказывает, что я прав" (с)И.П.Павлов
- Fastman
- ст. лейтенант
- Сообщения: 1236
- Зарегистрирован: 2006-07-07 10:20:38
- Откуда: Минск. РБ
Re: Запутался в "указателях на указатели"
Может на первый взгляд непривычно, но ничего сложного.
Ниже реализация остальных классов приведена.
Шэйп и бокс как видишь не просто поля класса, это указатели на объект.
Я не говорю что то что я привел в пример нужно брать за основу, можно подсмотреть принцип )
Зато при таком подходе будешь иметь понятный быстрый произвольный доступ ко всем элементам своей структуры данных.
Тут можно конечно спросить для чего же Тогда CCollector, если можно и без него обойтись. Но я бы например оставил его.
Ну очень удобно в нем будет реализовать например перегрузку операторов сложения и вычитания координат объектов итд.
Очень даже красиво получиться:))
Ниже реализация остальных классов приведена.
Шэйп и бокс как видишь не просто поля класса, это указатели на объект.
Я не говорю что то что я привел в пример нужно брать за основу, можно подсмотреть принцип )
Зато при таком подходе будешь иметь понятный быстрый произвольный доступ ко всем элементам своей структуры данных.
Тут можно конечно спросить для чего же Тогда CCollector, если можно и без него обойтись. Но я бы например оставил его.
Ну очень удобно в нем будет реализовать например перегрузку операторов сложения и вычитания координат объектов итд.
Очень даже красиво получиться:))
Код: Выделить всё
#pragma once
#include "Box.h"
#include "Shape.h"
using namespace std;
class CCollector
{
public:
CCollector(void)
{
m_pBox = NULL;
m_pShape = NULL;
};
~CCollector(void);
CBox *m_pBox;
CShape *m_pShape;
};
Код: Выделить всё
#pragma once
#include <string>
#include <iostream>
using namespace std;
class CShape
{
int x, y, z;
string cName;
public:
CShape() {x = y = z = 0;};
CShape(int nx, int ny, int nz, const string ccName) {x = nx; y = ny; z = nz; cName = ccName;}
void ShapeParam()
{
cout<< "Name:" << cName
<< " Coordinates "
<< x <<":"
<< y <<":"
<< z << endl;
}
~CShape(void);
};
Код: Выделить всё
#pragma once
#include <string>
#include <iostream>
using namespace std;
class CBox
{
int x, y, z;
string cName;
public:
CBox() {x = y = z = 0;}
CBox(int nx, int ny, int nz, const string ccName) {x = nx; y = ny; z = nz; cName = ccName;}
void BoxParam()
{
cout<< "Name:" << cName
<< " Coordinates "
<< x <<":"
<< y <<":"
<< z << endl;
}
~CBox(void);
};
Главное в жизни здоровье и любовь, остальное я все куплю.
-
- сержант
- Сообщения: 220
- Зарегистрирован: 2007-05-11 14:39:01
- Откуда: Отсюда :)
Re: Запутался в "указателях на указатели"
Укопался в парсере... 2-ой день уже.
Ткните плиз в ошибку.
temp.lex
temp.y
main
Что не напишу - на всё syntax error

temp.lex
Код: Выделить всё
%{
#include <stdio.h>
#include <string.h>
#include "common.h"
#include "temp.tab.h"
%}
floatdigit [0-9,.]
constant {floatdigit}+
%option noyywrap
%%
NAME {
yylval.name = strdup(yytext);
return NAME;
}
constant {
sscanf(yytext, "%f", &yylval.floatval);
return VAL;
}
#.*$
[\n\r\t ]+
. {
return *yytext;
}
%%
Код: Выделить всё
%{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "common.h"
%}
%union {
float floatval;
char *name;
ExprPair *pair;
}
%token <floatval> VAL
%token <name> NAME
%type <pair> expr
%%
start: | start line;
line: '\n' | expr '\n';
expr: NAME '=' VAL {
exprpair = new ExprPair();
char *name = (char*)malloc(strlen($1));
yylval.floatval = $3;
exprpair->SetPair($1, yylval.floatval);
return NAME;
}
%%
Код: Выделить всё
#include "common.h"
ExprPair* exprpair = 0;
#include "lex.yy.c"
#include "temp.tab.c"
void ExprPair::SetPair(char *iname, float ivalue) {
name = iname;
value = ivalue;
}
int main(int argc, char** argv) {
printf("%d\n", yyparse());
if (exprpair) {
printf("%s %.2f\n", exprpair->name, exprpair->value);
delete exprpair;
}
}
Последний раз редактировалось de-signer 2009-05-20 16:45:30, всего редактировалось 1 раз.
---
"Если я рассуждаю логично, то это значит только то, что я не сумашедший, но вовсе не доказывает, что я прав" (с)И.П.Павлов
"Если я рассуждаю логично, то это значит только то, что я не сумашедший, но вовсе не доказывает, что я прав" (с)И.П.Павлов
-
- проходил мимо
- Сообщения: 11620
- Зарегистрирован: 2008-02-21 18:15:41
Re: Запутался в "указателях на указатели"
пример выполнения кода
что не так
и как компиляешь
добавь
что не так
и как компиляешь
добавь
-
- сержант
- Сообщения: 220
- Зарегистрирован: 2007-05-11 14:39:01
- Откуда: Отсюда :)
Re: Запутался в "указателях на указатели"
run
Код: Выделить всё
gcc -Wall -o main -I/usr/local/include main.c++ && chmod 754 main && ./main
Код: Выделить всё
%bison -d temp.y
%flex temp.lex
%./run
name=5
syntax error
1
%
---
"Если я рассуждаю логично, то это значит только то, что я не сумашедший, но вовсе не доказывает, что я прав" (с)И.П.Павлов
"Если я рассуждаю логично, то это значит только то, что я не сумашедший, но вовсе не доказывает, что я прав" (с)И.П.Павлов
-
- сержант
- Сообщения: 220
- Зарегистрирован: 2007-05-11 14:39:01
- Откуда: Отсюда :)
Re: Запутался в "указателях на указатели"
Мой ввод:
name=5
единица в конце - это результат printf из main.c++::main
name=5
единица в конце - это результат printf из main.c++::main
---
"Если я рассуждаю логично, то это значит только то, что я не сумашедший, но вовсе не доказывает, что я прав" (с)И.П.Павлов
"Если я рассуждаю логично, то это значит только то, что я не сумашедший, но вовсе не доказывает, что я прав" (с)И.П.Павлов
-
- сержант
- Сообщения: 220
- Зарегистрирован: 2007-05-11 14:39:01
- Откуда: Отсюда :)
Re: Запутался в "указателях на указатели"
Добавляю
#define YYERROR_VERBOSE
получаю:
syntax error, unexpected $undefined, expecting $end or NAME or '\n'
от этого ни теплее ни холоднее
#define YYERROR_VERBOSE
получаю:
syntax error, unexpected $undefined, expecting $end or NAME or '\n'
от этого ни теплее ни холоднее
---
"Если я рассуждаю логично, то это значит только то, что я не сумашедший, но вовсе не доказывает, что я прав" (с)И.П.Павлов
"Если я рассуждаю логично, то это значит только то, что я не сумашедший, но вовсе не доказывает, что я прав" (с)И.П.Павлов
-
- проходил мимо
- Сообщения: 11620
- Зарегистрирован: 2008-02-21 18:15:41
Re: Запутался в "указателях на указатели"
а ты там случайно не
парсишь?
вообще возьми примеры где все работает
так легче будет разобраться
Код: Выделить всё
name
=
5
вообще возьми примеры где все работает
так легче будет разобраться