我是C++编程的新手,所以也许你会发现我的问题太愚蠢了.对此感到抱歉,但我想知道如何实现这种Java风格的结构:
#include "B";
class A {
B objB;
}
---
#include "A";
class B {
A objA;
}
Run Code Online (Sandbox Code Playgroud)
编译器疯狂试图理解这段代码.你能告诉我一个可能的解决方案吗?谢谢!
假设我有:
class B;
class A{
private:
B *b;
public:
bar(){ b->foo()};
foo();
}
class B{
private:
A *a;
public:
bar(){ a->foo();}
foo();
}
Run Code Online (Sandbox Code Playgroud)
编译时,这个文件给出了一个
错误"无效使用不完整类型struct B",
即使我已经向前声明了B类.据我所知,这是因为当我调用函数foo()时b,编译器仍然不知道存在这样的函数.我怎么解决这个问题?
我正在寻找一种简单的方法来迭代 C++ 中的一组整数。例如,如果我有一个整数变量“x”,并且想要在 4 个整数值上连续使用增量语句“x++”,则所需的输出将类似于“0 1 2 3 0 1 2...”。
我知道循环链表是一个解决方案,但对我来说这似乎有点矫枉过正,我真的需要一些简短而甜蜜的东西。我怀疑枚举类型可能能够做这样的事情,但我的研究还没有发现任何结果。
我有两种类型:A和B.'聪明'指向B和B'聪明'指向A.在主要范围内,我有一个指向A的智能指针.
class A;
class B;
typedef shared_ptr<A> pA;
typedef shared_ptr<B> pB;
class B {
public:
B() {}
pA a;
virtual ~B() {cout << "delete b" << endl;}
};
class A {
public:
A() : b(new B()) {}
pB b;
virtual ~A() {cout << "delete a" << endl;}
};
int main(int argc, char **argv)
{
{
pA pa(new A());
pa->b->a = pa;
}
cout << "here" << endl;
}
Run Code Online (Sandbox Code Playgroud)
我希望在范围的末尾删除这两个对象.没有任何对象被删除,因为A有两个指向自身的指针(一个在b中,一个在主勺中).
这是一个简单的例子.实际上我有两种以上的类型和更多的指针.可以想象一个大的对象结构指向彼此浮动在RAM中,只有一个指针从主范围指向这个结构.我希望在释放此指针后删除此结构.
我是一个python newb,我只是想了解这里的逻辑:
class SomeClass:
#...
def __hash__(self):
return self.__str__().__hash__()
def __str__(self):
arr = []
if self.final:
arr.append("1")
else:
arr.append("0")
for (label, node) in self.edges.iteritems():
arr.append( label )
arr.append( str( node.id ) )
return "_".join(arr)
#...
someObj = SomeClass()
hash(someObj)
Run Code Online (Sandbox Code Playgroud)
我正在读它的方式是这样的:
如果我尝试hash()在类SomeClass的对象上调用函数 - >那么__hash__将执行魔术方法.__hash__方法调用__str__方法然后在__hash__方法的结果__str__上第二次调用方法- >其中imho导致循环引用和无限循环...
有人可以向我解释 - 这不是__hash__一次又一次被召唤的无限循环吗?
我有一个Delphi单元需要保留各种形式的应用程序的指针,以便稍后对它们进行操作.
为了执行这些操作,我需要将指针强制转换为表单类型,例如.
var
ptrFrmMain: Pointer;
CurrentFrmMain: TfrmMain;
begin
CurrentFrmMain := ptrFrmMain;
CurrentFrmMain.Close();
end;
Run Code Online (Sandbox Code Playgroud)
问题是该单元包含在应用程序的所有其他Delphi单元的使用中.因此,虽然我可以Pointer在接口部分声明一个简单类型,但我不能声明在其他单元(例如TfrmMain单元frmMain.pas)中声明的类型.
我可以通过在实现部分中使用来解决这个问题,例如:
interface
type TMyThread = class(TThread)
Public
ptrFrmMain:Pointer
...
implementation
uses frmMain
var
CurrentFrmMain: TfrmMain;
Run Code Online (Sandbox Code Playgroud)
但是仍然存在一个问题:我需要将变量特定于我的类实例,用于多线程目的,而不是通用的全局变量.但我不能把它放在我的TmyThread班级里面,因为TfrmMain没有在那里声明,我不能把它放在接口部分的使用中.
一个解决方案是CurrentFrmMain在所有使用它的过程中作为局部变量放置,然后CurrentFrmMain := ptrFrmMain每次都进行转换,但是你知道更好的解决方案吗?
非常感谢你提前.
例如,我有这个代码:
var objectA = {};
var objectB = {};
objectA.pointer = objectB;
objectB.pointer = objectA;
objectA = null;
objectB = null;
Run Code Online (Sandbox Code Playgroud)
我假设在最后两个语句之后,没有引用最初分配给objectA和objectB变量的对象.但根据技术文献,这些对象的参考仍然存在.为什么?objectA.pointer引用或objectB.pointer引用是否仍然存在,即使objectA和objectB设置为null?
我在这个Web服务项目中使用Spring(xml + annotations),Hibernate(注释).数据库关系图,模型,预期和实际输出如下,
Customer.java
@Entity
@Table(name="customer")
public class Customer implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="customer_id", unique=true, nullable =false)
long customerId;
@Column(name="name")
String name;
@Column(name="secondary_name")
String secondaryName;
@Column(name="date")
Date date;
@Column(name="address")
String address;
@Column(name="post")
String post;
@Column(name="pin")
String pin;
@Column(name="phone")
String phone;
@OneToMany(fetch=FetchType.LAZY, mappedBy="customer", cascade=CascadeType.ALL)
@JsonManagedReference
Set<Loan> loans = new HashSet<Loan>();
//constructors, getters and setters
}
Run Code Online (Sandbox Code Playgroud)
Loan.java
public class Loan implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY) …Run Code Online (Sandbox Code Playgroud) 在这样的语言中C#这不是问题,但是这会导致很难找到其他语言的内存错误。我可以在中使用以下代码,Typescript还是可以Javascript相信一切都会好起来吗?
class Dad {
kids: Kid[];
}
class Kid {
dad: Dad;
siblings: Kid[];
}
let anakin: Dad | undefined;
function makeKids(dad: Dad) {
const luke = new Kid();
const leia = new Kid();
luke.dad = dad;
leia.dad = dad;
luke.siblings = [leia];
leia.siblings = [luke];
dad.kids = [luke, leia];
}
anakin = new Dad();
makeKids(anakin);
console.log(anakin.kids.length); // Prints out 2
anakin = undefined;
// I expect luke and leia to die at this …Run Code Online (Sandbox Code Playgroud) 所以我有两个结构体,为了简单起见,我们将它们称为A和B。A包含一个指向 的指针B,并B包含一个A。所以这里是代码:
啊
#ifndef A_H
#define A_H
#include "b.h"
typedef struct _A {
B *b;
} A;
#endif
Run Code Online (Sandbox Code Playgroud)
哈
#ifndef B_H
#define B_H
#include "a.h"
typedef struct _B {
A a;
} B;
#endif
Run Code Online (Sandbox Code Playgroud)
现在的问题是,当我从我的主 c 文件中导入 ah 时,我收到关于 A 是如何从 bh 未知类型的错误我不知道如何解决这个问题。
c++ ×4
javascript ×2
c ×1
delphi ×1
hibernate ×1
include ×1
iteration ×1
jackson ×1
node.js ×1
one-to-many ×1
python ×1
shared-ptr ×1
siblings ×1
spring-mvc ×1
struct ×1
typescript ×1