我是C++/cli的新手,我面临的情况是: 我正在做的项目需要使用外部dll,在我的函数I需要使用类A,B和C都是从这个dll,我把它们放在我的.h文件,.h文件看起来像:从[class name]到[class name]没有合适的转换函数*
#include library I use
public ref class MyClass
{
public:
MyClass();
~MyClass();
otherfuc();
private:
A *a;
B *b;
C *c;
}
我.cpp文件看起来像:
MyClass::MyClass()
{
a = new A();
b = new B(*a);
c = b->func(); //error happened
}
MyClass::otherfunc()
{
c->func_c()
}
A,B,C类是非托管类,所以我只有一种方法可以在托管类中声明它们,就像我在头文件中一样。在类B中,它有一个叫做func的函数,这个函数返回类类型C,我试过c = & b-> func(),这样它会抛出AccessViolationException,如果我试过c = b-> func ,那么错误是函数调用缺少参数。我该怎么做,请帮助!
b-> func()返回一个临时对象实例。您正在将它的地址存储在MyClass :: c中。当构造函数退出时,临时被销毁,MyClass :: c包含无效地址。稍后调用otherfunc(),并使用'c'中的无效地址导致访问冲突。 – tukra
谢谢您的回复。这有助于我理解。对于这个特定的问题,你知道我有什么办法可以实现它吗?我真的很感激。@ tukra – Chen