Pages: (3) [1] 2 3  ( Show unread post )

> туплю в c++
 Lexus Member is Offline
 Posted: 14-11-2010, 00:12 (post 1, #990544)

Коллекционер
Group: Global Moders
Group: Global Moders
Posts: 10401
Имеетъся 2 класса (Cell, Node) и основная програмулина da.cpp

В классах Cell и Node надо сделать поинтеры друг на друга. Гугл сказал нужно Forward referenz делатъ, но что-то я так и не допёр :(

Исходники таковы:

cell.h
CODE

#ifndef _cell_h_
#define _cell_h_
#include "Node.h"

class Cell {

public:
int status; //0-int,1-bdry,2-outside
double _value;
Cell * Neighbours[2];
Node * NodePointer;

Cell(double value);
Cell();
~Cell();

};

#endif /* _cell_h_ */

cell.cpp
CODE
#include <iostream>
#include <list>
#include <map>
#include <vector>
#include <fstream>
#include "Cell.h"

using namespace std;


Cell::Cell(double value): _value(value){};
Cell::Cell(){};
Cell::~Cell(){};


Node.h
CODE
#ifndef _node_h_
#define _node_h_

#include "Cell.h"

class Cell;
class Node {

public:
int _eventtyp; //0 - Node, 1,2,... - leaf
bool _isleaf;

//samplingtest

Cell *_CellPointer; //Null - if Node
Node * Neighbours[2];
double _NodeRate;
double _NodeValue;
int _Num;
//double _NodeRightRate;
Node *_ParentNode, *_nLeft, *_nRight;
Node(int Num,double NodeValue, double NodeRate, bool isleaf);
Node(Node* pLeftChild, Node* pRightChild);
Node();
    ~Node();
inline double getRate() {return _NodeRate;}
inline bool operator <(const Node &other) const{return _NodeRate<other._NodeRate;}

};



#endif /* _node_h_ */

Node.cpp
CODE
#include <iostream>
#include <list>
#include <map>
#include <vector>
#include <fstream>
#include "Node.h"
//#include "Cell.h"

using namespace std;

Node::Node(int Num,double NodeValue, double NodeRate, bool isleaf):  _Num(Num),_NodeValue(NodeValue),_NodeRate(NodeRate),_nLeft(NULL),_nRight(NULL), _isleaf(isleaf)
{
_eventtyp=0;
//_NodeRightRate=_NodeRate;

}
Node::Node(Node* pLeftChild, Node* pRightChild): _NodeRate(pLeftChild->_NodeRate+pRightChild->_NodeRate),_nLeft(pLeftChild),_nRight(pRightChild),_isleaf(false)
{
//_NodeRightRate=pRightChild->_NodeRate;
}

Node::Node(){

_CellPointer = new Cell;

};
Node::~Node(){};

В DA создаётъся обект Node и Cell и поинтерывают друг на друга.

Ну что-то я запутался во всём этом перекрёстном поинтерование.
Заранее спасибо за помощь
PM Email Poster Users Website
Top Bottom
 Set Member is Offline
 Posted: 14-11-2010, 02:15 (post 2, #990569)

Visionary

Group: Members
Posts: 5181
Warn:0%-----
Forward declaration это, пример http://www.adp-gmbh.ch/cpp/forward_decl.html

#include "Node.h", #include "Cell.h" - друг в друга не надо, просто:

CODE
class Cell;
class Node {

CODE
class Node;
class Cell {

Указывается, что есть такой класс, а определение его будет потом.
PM
Top Bottom
 Lexus Member is Offline
 Posted: 14-11-2010, 14:16 (post 3, #990590)

Коллекционер
Group: Global Moders
Group: Global Moders
Posts: 10401
Странно как-то вышло. Visual Studio компилирует и всё пашит, г++ ругается:
: undefined reference to

Пример по ссылке тоже не компилиться g++
PM Email Poster Users Website
Top Bottom
 Lexus Member is Offline
 Posted: 14-11-2010, 14:33 (post 4, #990592)

Коллекционер
Group: Global Moders
Group: Global Moders
Posts: 10401
Проблема решена. не знал, что компайлеру нужно каждый файл указывать как апраметр :&#040;
PM Email Poster Users Website
Top Bottom
 FiL Member is Offline
 Posted: 14-11-2010, 16:58 (post 5, #990600)

Сварливый Мозг Клуба
Group: Roots
Group: Roots
Posts: 22892
QUOTE (Lexus @ 14-11-2010, 06:33)
Проблема решена. не знал, что компайлеру нужно каждый файл указывать как апраметр :&#040;
makefile писать надо.
PM Email Poster ICQ AOL MSN
Top Bottom
 Lexus Member is Offline
 Posted: 14-11-2010, 17:35 (post 6, #990613)

Коллекционер
Group: Global Moders
Group: Global Moders
Posts: 10401
QUOTE (FiL @ 14-11-2010, 14:58)
QUOTE (Lexus @ 14-11-2010, 06:33)
Проблема решена. не знал, что компайлеру нужно каждый файл указывать как апраметр :&#040;
makefile писать надо.
Да тут засада, по крайней меря для меня :&#041; Пишу под виндой, а запускаться всё будет под салярисом. Поэтому я даже хз куда этит makefile и как его едят :&#040;
PM Email Poster Users Website
Top Bottom
 FiL Member is Offline
 Posted: 14-11-2010, 17:59 (post 7, #990616)

Сварливый Мозг Клуба
Group: Roots
Group: Roots
Posts: 22892
куда - понятно. Рядом с cpp и h файлами. А вот как его писать - тут я тебе не помошник. Но ты уже начинай разбираться, ибо если прокт вырастет за пределы 3-х файлов то по-любому придется. А тренироваться лучше на кошечках :&#041;
PM Email Poster ICQ AOL MSN
Top Bottom
 Lexus Member is Offline
 Posted: 18-11-2010, 14:49 (post 8, #991073)

Коллекционер
Group: Global Moders
Group: Global Moders
Posts: 10401
Дело идёт дальше. Уже есть картинки :&#041;

user posted image

QUOTE
if(currentNode2D->_CellPointer->Neighbours[2]!=NULL)
{
currentNode2D->_CellPointer->Neighbours[2]->NodePointer->_NodeRate=fabs(dh2D(currentNode2D->_CellPointer->Neighbours[2]));
Tree2D->UpdateRate(currentNode2D->_CellPointer->Neighbours[2]->NodePointer);
}
if(currentNode2D->_CellPointer->Neighbours[3]!=NULL)
{
currentNode2D->_CellPointer->Neighbours[3]->NodePointer->_NodeRate=fabs(dh2D(currentNode2D->_CellPointer->Neighbours[3]));
Tree2D->UpdateRate(currentNode2D->_CellPointer->Neighbours[3]->NodePointer);
}
if(currentNode2D->_CellPointer->Neighbours[0]!=NULL)
{
currentNode2D->_CellPointer->Neighbours[0]->NodePointer->_NodeRate=fabs(dh2D(currentNode2D->_CellPointer->Neighbours[0]));
Tree2D->UpdateRate(currentNode2D->_CellPointer->Neighbours[0]->NodePointer);
}
if(currentNode2D->_CellPointer->Neighbours[1]!=NULL)
{
currentNode2D->_CellPointer->Neighbours[1]->NodePointer->_NodeRate=fabs(dh2D(currentNode2D->_CellPointer->Neighbours[1]));
Tree2D->UpdateRate(currentNode2D->_CellPointer->Neighbours[1]->NodePointer);
}

-> здесь

Так как всё будет бегать на квадкоре, то хотелось бы эти операции замультрейдить и где "здесь" удастовериться, что трейды отработали, продолжить дальше отрабстывать код.
С трейдами ниразу ничего не делал, на что стоит обратить внимание и как их использовать?
PM Email Poster Users Website
Top Bottom
 Lord KiRon Member is Offline
 Posted: 18-11-2010, 18:40 (post 9, #991108)

Part time flamer

Group: Read Only
Posts: 7784
Warn:0%-----
QUOTE (Lexus @ 18-11-2010, 13:49)
Так как всё будет бегать на квадкоре, то хотелось бы эти операции замультрейдить и где "здесь" удастовериться, что трейды отработали, продолжить дальше отрабстывать код.
С трейдами ниразу ничего не делал, на что стоит обратить внимание и как их использовать?
Э... подожди годика так 2-3, поднаберись опыта, в принципе в работе с потоками ничего сложного нет, но не с наскока же...
Кстати, глядя на картинку - рекомендую IPP: http://software.intel.com/en-us/articles/intel-ipp/
думаю тебе прегадится, да и все операции там уже внутри мультистредные и мультикорные.
К тому же есть версия и для винды и для Линикса.
PM
Top Bottom
 FiL Member is Offline
 Posted: 18-11-2010, 19:40 (post 10, #991118)

Сварливый Мозг Клуба
Group: Roots
Group: Roots
Posts: 22892
дык ему-то надо под солярис :&#041;
PM Email Poster ICQ AOL MSN
Top Bottom
 Lexus Member is Offline
 Posted: 18-11-2010, 20:22 (post 11, #991124)

Коллекционер
Group: Global Moders
Group: Global Moders
Posts: 10401
QUOTE (Lord KiRon @ 18-11-2010, 16:40)
Э... подожди годика так 2-3, поднаберись опыта, в принципе в работе с потоками ничего сложного нет, но не с наскока же...
Нужно именно в с++ и ждать некогда, это часть моей будушей дипломной. Т.е. оно и так работает, но у меня будет часть отведена под оптимайзинг и оно нужно :&#041;)))
PM Email Poster Users Website
Top Bottom
 Lord KiRon Member is Offline
 Posted: 18-11-2010, 21:00 (post 12, #991129)

Part time flamer

Group: Read Only
Posts: 7784
Warn:0%-----
QUOTE (FiL @ 18-11-2010, 18:40)
дык ему-то надо под солярис :&#041;
А в солярисе я не копенгаген, там хоть beginthread работает или все через задницу fork?
PM
Top Bottom
 Lexus Member is Offline
 Posted: 18-11-2010, 21:03 (post 13, #991130)

Коллекционер
Group: Global Moders
Group: Global Moders
Posts: 10401
а можно это как-то проверить? Какая-нибудь минипрожка, я профу бы скинул, чтоб он под солярисом попробывал бы скомпилировать.
PM Email Poster Users Website
Top Bottom
 Lord KiRon Member is Offline
 Posted: 19-11-2010, 00:15 (post 14, #991155)

Part time flamer

Group: Read Only
Posts: 7784
Warn:0%-----
PM
Top Bottom
 Lexus Member is Offline
 Posted: 19-11-2010, 00:24 (post 15, #991158)

Коллекционер
Group: Global Moders
Group: Global Moders
Posts: 10401
QUOTE (Lord KiRon @ 18-11-2010, 22:15)
Гугл наше все:
http://condor.depaul.edu/~dmumaugh/readings/handouts/CSC343/unixthreads.html
Спасибо. Есть ешё вопрос. У меня объект Tree2D, в нём функция UpdateRate. Тредами я запускаю эту функцию 4-5 раз. Может такое быть, что будет ешё медленей из-за того, что все на один объект кидаються?
PM Email Poster Users Website
Top Bottom
Topic Options Pages: (3) [1] 2 3