【发布时间】:2020-09-01 19:32:13
【问题描述】:
数组:
#ifndef ARRAY_H
#define ARRAY_H
#include <bits/stdc++.h>
using namespace std;
namespace Maifee{
class Value;
class Array {
public:
Array();
vector<Value> _elements;
};
}
#endif // ARRAY_H
对象:
#ifndef OBJECT_H
#define OBJECT_H
#include <bits/stdc++.h>
#include "value.h"
using namespace std;
namespace Maifee{
class Value;
class Object{
public:
Object();
map<string, Value> _members;
};
}
#endif // OBJECT_H
价值:
#ifndef VALUE_H
#define VALUE_H
#include <bits/stdc++.h>
#include "array.h"
#include "object.h"
using namespace std;
namespace Maifee{
class Array;
class Object;
class Value {
public:
Value();
Value(Object *__object);
Array *_array;
Object *_object;
};
}
#endif // VALUE_H
我正在尽我最大的努力学习 C++。凭借我对 C++ 的一点点了解,我正在尝试编写一些代码。我移动 C++ 的第一个原因,指针需要很多时间。
在这里我正在编写这些代码,其中需要前向声明,因此即使在使用前向声明和 ifndef 之后,我也需要使用指针,我真的不想要。
谁能真正帮我解决这个问题,我怎样才能消除循环依赖?
我需要回到 C 吗?
在使用指针时,我遇到了很多问题,例如,我的地图中只有一个键值对,但在下一行,大小变成了一个非常大的数字,不知从何而来。
main 中的代码:
Object object=Object();
cout << "pop obj tem len" << object._members.size() << endl; //gives 0 as expected
object._members = members;
cout << "pop obj tem len" << object._members.size() << endl; //gives the expected number
Value val=Value(&object);
cout << val._object->_members.size() << "size here" << endl; //gives a random number
带有 Object 参数的 Value 构造函数:
Value::Value(Object *__object)
{
Object object;
object._members.insert(__object->_members.begin(), __object->_members.end());
_object = &object;
}
【问题讨论】:
-
重要阅读:Why should I not #include <bits/stdc++.h>? 和 Why is “using namespace std;” considered bad practice?。尤其是当 和 在标头中一起使用时,这是一种很好的方法,可以创建非常讨厌的错误并将编译时间增加一个数量级。
-
再一次证明
#include <bits/stdc++.h>和using namespace std;即使在所谓的“竞争性编程”中也是不可接受的。人们从一开始就养成坏习惯,然后坚持下去。 -
你到底在问什么?我无法跟随你的思路。您尝试了指针,但没有成功,您不知道是否应该坚持使用 C ......但这与您粘贴在这里的代码有什么关系?您需要帮助的实际问题是什么?
-
@MaifeeUIAsad "当使用指针时,我遇到了很多问题,例如,我的地图中只有一个键值对,但在下一行中,大小变成了一个非常大的数字,超出无处。” - 那么您在显示的代码之外做错了其他事情。但我们看不到那是什么。请提供minimal reproducible example。您可能正在访问一个无效的指针。
-
@remy 刚刚添加了两个构造函数,其中 map 作为参数,object 作为参数......并且代码在 main 函数中。
标签: c++ forward-declaration ifndef