Я работаю над симулятором цепи / системой поиска пути, но продолжаю получать эти странные ошибки компиляции.У меня пока нет опыта работы с OO C ++, чтобы самому разобраться ...
Дерево объектов
Объекты в моем проекте реализованы следующим образом:
My Object class является базовым классом для всего в моем проекте, он отлично подходит для отладки, давая всем имя и идентификатор.Мне потребовалось, чтобы каждому компоненту была нужна схема с (смотрите его как родительский для компонентов).Я реализовал это, создав конструктор в классе Component, который требует ссылки на объект Circuit.
Сначала все работало и компилировалось нормально, но когда я представил класс Circuit и добавил конструктор в Componentсо ссылочным параметром Circuit все пошло не так ...
Ошибки компиляции
Теперь я продолжаю получать этот, казалось бы, случайный синтаксис и ошибки отсутствующих токенов.(Intellisense не помечает их?)
Первые четыре всплывающие ошибки:
C2238: unexpected token(s) preceding ';'
.
В строке 10 Component.hpp.И в строке 12 в файле Circuit.hpp.Оба сразу после определения конструктора.(См. В коде ниже)
Следующие четыре ошибки указывают на те же места, но он отмечает:
C2143: syntax error: missing ';' before '*'
.
Затем следуют еще 30 ошибок, ноЯ думаю, что они являются результатом этих ошибок, безусловно, вот они:
(Lol, не могу встроить изображение, вызванное нехваткой репутации, поэтому вместо ссылки ...)
Нажмите здесь для ошибок
Что я пробовал
Я попробовал следующее:
- Используя ссылкувместо указателя.(изменено
Circuit* c
на Circuit& c
) - Удаление символа конкатенации строки имени в списке инициализатора конструктора.(изменено
... : Object(name + "blah")
на ... : Object(name)
) - Перезапись всего проекта Visual Studio в новый проект Visual Studio.
- Размещение списка инициализатора конструктора в файле заголовка.
- Много гуглил… и не так много решений…
Как исправить?
Эта неприятная проблема мешает мне работать дальшеэтот проект, что его вызывает и как мне это исправить?Я был бы очень рад узнать.
Object.hpp
#pragma once
#include <string>
using std::string;
class Object
{
public:
Object();
Object(string name);
string name;
const int id;
virtual string toString();
private:
static int currentId;
};
Object.cpp
#include "Object.hpp"
int Object::currentId = 0;
Object::Object() : id(++Object::currentId), name("Object")
{ }
Object::Object(string name) : id(++Object::currentId), name(name)
{ }
string Object::toString()
{
return name + "#" + std::to_string(id);
}
Component.hpp
#pragma once
#include "Object.hpp"
#include "Circuit.hpp"
class Component : public Object
{
public:
Component(std::string name, Circuit* container);
Circuit *container; // <- Error points to the beginning of this line
};
Component.cpp
#include "Component.hpp"
Component::Component(string name, Circuit* container) : Object(name), container(container)
{ }
Switch.hpp
#pragma once
#include "Component.hpp"
#include "Wire.hpp"
class Switch : public Component
{
public:
Switch(string name, Circuit* container, Wire& wire1, Wire& wire2);
Wire* wire1;
Wire* wire2;
void setEnabled(bool enabled);
bool getEnabled();
private:
bool enabled;
};
Switch.cpp
Switch::Switch(string name, Circuit* container, Wire& wire1, Wire& wire2) : Component(name + "-Switch", container), wire1(&wire1), wire2(&wire2), enabled(false)
{ }
...
Circuit.hpp
#pragma once
#include "Object.hpp"
#include "Wire.hpp"
class Circuit : public Object
{
public:
Circuit(std::string name);
Wire* powerWire; // <- Error points to the beginning of this line
bool isPowered(Wire& wire);
bool getActive();
void setActive(bool active);
private:
bool active;
};
Circuit.cpp
#include "Circuit.hpp"
#include "Util.hpp"
Circuit::Circuit(string name) : Object(name + "-Circuit")
{
active = false;
powerWire = new Wire(name + "-PowerWire", this);
}
...