Я использую C# в течение года и недавно испытываю терпение в суровом мире C++.C++ Справочная информация
Я пытаюсь создать двоичное дерево, ориентированное на объект. Я прошел через код и прочитал о передаче ссылочного параметра и использовании константы в C++, но не могу решить, что я делаю, чтобы вызвать ошибку нарушения доступа. Я убедился, что структура создана правильно, и код завершает первую строку main, как ожидалось, однако вызов toString, похоже, приводит к ошибке, и я не могу понять, почему.
Вот код до сих пор:
// ExpressionCL.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
using namespace std;
template<class TData> class TreeNode
{
private:
TData Data;
const TreeNode<TData>* Left = nullptr;
const TreeNode<TData>* Right = nullptr;
void setData(TData data)
{
Data = data;
}
public:
TreeNode<TData>(TData data)
{
setData(data);
}
TreeNode<TData>(TData data, const TreeNode<TData>& leftNode, const TreeNode<TData>& rightNode)
{
setData(data);
setLeft(leftNode);
setRight(rightNode);
}
void setLeft(const TreeNode<TData>& leftNode)
{
Left = &leftNode;
}
void setRight(const TreeNode<TData>& rightNode)
{
Right = &rightNode;
}
TreeNode<TData> getLeft() const
{
if (hasLeft())
{
return Left;
}
}
TreeNode<TData> getRight() const
{
if (hasRight())
{
return Right;
}
}
TData getData() const
{
return Data;
}
bool hasLeft() const
{
if (Left != nullptr)
{
return true;
}
else
{
return false;
}
}
bool hasRight() const
{
if (Right != nullptr)
{
return true;
}
else
{
return false;
}
}
string toString() const
{
string treeString = "";
if (hasLeft())
{
treeString += Left->toString();
}
treeString += to_string(Data);
if (hasRight())
{
treeString += Right->toString();
}
return treeString;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
TreeNode<int> IntTree(1, TreeNode<int>(1), TreeNode<int>(2));
cout << IntTree.toString() << endl;
return 0;
}
Некоторые рекомендации или далее рекомендовал ресурсы было бы здорово.
Вы путаетесь между указателями и ссылками> o < – ikh
Хранение указателей на временные часы дадут вам плохое время. –
И код не должен компилироваться так, как написано, по крайней мере, если вы включили предупреждения (и к ошибке), как вам действительно нужно.'getLeft' и' getRight' имеют пути без инструкции 'return'. –