2011-12-13 25 views
0
MemoryManager openMemory() { 
    if (...) { 
    return memory_manager_instance; 
    } 
    else 
    return NULL; 
} 

MemoryManager是用户定义的C++类的名称。上面的函数定义给了我标题中的错误。无法将'0l'从'long int'转换为'MemoryManager'

基本上我不想在条件不成立时返回实例。这样的函数定义是有效的,我通常在Java中做,但它似乎不适用于C++。我该怎么做才能解决这个问题?

+1

Java只有指针,这就是为什么你可以返回NULL对象。在C++中,您的代码需要MemoryManager中的转换构造函数,它不存在或者是显式的。你可能意思是返回一个指针而不是一个值。也可能需要抛出异常或返回一个默认的初始化对象 - 无法从您的问题中得知。 – 2011-12-13 18:53:32

回答

6

让你的函数返回一个MemoryManager *(也许使用C++库中或boost中的几个智能指针类之一)。如果MemoryManager是一个类的名字,那么写这个函数会返回一个memory_manager_instance的副本。这与Java不同,其中MemoryManager类型的变量将作为对象的引用。

编辑:此外,它看起来像你试图实现一个单身人士。您希望为MemoryManager设置私有或受保护的默认构造函数,复制构造函数和赋值运算符。前两个也是用Java编写的,但不是最后一个!

相关问题