您的问题是您应该接受函数中的引用.原因是引用实际上并不复制传递的参数.但是如果你接受A
- 而不是引用A&
- 那么你实际上复制了传递给参数对象的参数,你得到的是一个类型的对象A
- 但实际上是不允许的!
// the reference parameter will reference the actual argument void setInstance(A &newInstance) { // assign the address of the argument to the pointer member // instance. instance = &newInstance; }
然后,您必须将类中的成员更改为指针.它不能作为引用,因为setInstance
它将改变它引用的内容 - 引用只能在其整个生命周期中引用一个对象,而指针可以设置为指向不同的事情,只需将其重新分配给不同的地址即可.其余部分就是这样的
void doSomething() { // call a member function on the object pointed to // by instance! instance->action(); } private: // a pointer to some object derived from A A *instance;
另请注意,您必须使用编译C++程序g++
,因为它还将C++标准库链接到您的代码
g++ -o test test.cpp # instead of gcc!
你正在做什么将在Java中工作,因为声明类型为"A"的参数或成员变量实际上意味着"指向A的指针".在C++中,你实际上需要明确这一点,因为它们是两个不同的东西:
void setInstance(A* newInstance) { // pointer to an "A" instance = newInstance; }
并在声明中:
A* instance; // Not an actual "A", but a pointer to an "A"