Форум сайта python.su
Помогите если не трудно перевести етот код в C++. Я недавно начал его учить и мне нужно один раз увидеть как это делается…;)
class Node: def __init__(self,initData,initPrevious = None,initNext = None): self.data = initData self.next = initNext self.previous = initPrevious def getData(self): return self.data def getNext(self): return self.next def getPrevious(self): return self.previous def setData(self,newdata): self.data = newdata def setNext(self,newnext): self.next = newnext def setPrevious(self,newprevious): self.previous = newprevious def __str__(self): return str(self.data)
Офлайн
template<class T>
class Node
{
T* data,*next,*previous;
public:
Node(T *initData,T *initPrevious ,T *initNext):data(initData),previous(initPrevious) ,next(initNext){}
T* getData() const {return data;}
T* getNext() const {return next;}
void setData(T *newdata){data=newdata;}
void setNext(T *newdata){next=newdata;}
operator string() const {return string(*data);}
};
Отредактировано doza_and (Апрель 7, 2012 06:43:56)
Офлайн
выдает ошибку: “ ‘Node’ is not a template type ” :S
Офлайн
А у меня никаких ошибок. vc10,g++ 4.5.2 :)
operator string() const {return string(*data);} комментировал чтобы не возиться с преобразованием в строку.
Напишите что делали чтобы в этом коде получить ошибку.
Офлайн
Честно говоря я попробовал сделать немного по другому но всё равно не выходит. Не подскажите где я ощибаюсь ? У меня CodeBlocks.
Node.hpp
#ifndef NODE_HPP #define NODE_HPP #include <iostream> using namespace std; class Node { public: Node(); Node(int data,int previous,int next); double getData() const; double getNext() const; double getPrevious() const; void setData(int data); void setNext(int next); void setPrevious(int previous); friend std::ostream& operator <<(std::ostream&, const Node& data); private: int data,previous,next; }; #endif // NODE_HPP]
#include "Node.hpp" #include <iostream> using namespace std; Node::Node() : initData(0), initPrevious(0), initNext(0) {} Node::Node(int data,int previous,int next): data(initData),previous(initPrevious) ,next(initNext) {} double Node::getData() const { return this->data; } double Node::getNext() const { return this->next; } double Node::getPrevious() const { return this->previous; } void Node::setData(int data) { this-> initData=data; } void Node::setNext(int next) { this->initNext=next; } void Node::setPrevious(int previous) { this->initPrevious=previous; } std::ostream& operator <<(std::ostream& str, const Point& data) { str << data; return str; }
Отредактировано Armany (Апрель 10, 2012 12:41:16)
Офлайн
Ну первое что бросается в глаза
Node::Node() : initData(0), initPrevious(0), initNext(0)
initData - нигде не определена надо data(0) именно такое поле есть в классе.
Node::Node(int data,int previous,int next): data(initData),
тоже перепуталось то что инициализируется с тем чем оно инициализируется
надо примерно так:
Node::data(::data) тут получилось одинаковое название переменной класса и аргумента конструктора
А лучше их называть по разному:
Node::Node(int data_value,int previous,int next): data(data_value),
using namespace std;
std::ostream& operator
если уж заюзали std дальше можно писать ostream вместо std::ostream.
Лично мне кажется что тут вообще ни к чему явоподобный гемморой. Пишите проще!
class Node
{
public:
Node():previous(0),next(0){}
int previous,next;
};
Отредактировано doza_and (Апрель 10, 2012 23:15:19)
Офлайн
doza_and
Ну первое что бросается в глаза
Node::Node() : initData(0), initPrevious(0), initNext(0)
initData - нигде не определена надо data(0) именно такое поле есть в классе.
Node::Node(int data,int previous,int next): data(initData),
тоже перепуталось то что инициализируется с тем чем оно инициализируется
надо примерно так:
Node::data(::data) тут получилось одинаковое название переменной класса и аргумента конструктора
А лучше их называть по разному:
Node::Node(int data_value,int previous,int next): data(data_value),
using namespace std;
std::ostream& operator
если уж заюзали std дальше можно писать ostream вместо std::ostream.
Лично мне кажется что тут вообще ни к чему явоподобный гемморой. Пишите проще!Методы доступа сделаете когда будет к этому веское основание.class Node
{
public:
Node():previous(0),next(0){}
int previous,next;
};
Отредактировано Armany (Апрель 12, 2012 13:20:38)
Офлайн