传递字符串时出错

Error when passing string through

这是我的代码:

#include "animal.h"

Animal::Animal(string animal)
{
    this->animal = animal;
}

string Animal::toString()
{
    return animal;
}

Animal newInstance(string animal)
{
   return new Animal(animal); // HERE IS THE ERROR
}

在我的 header:

private:
    string animal;

error: could not convert '(std::basic_string(((const std::basic_string)(& animal))), (operator new(8u), (, ((Animal*)))))' from 'Animal*' to 'Animal'

我还需要 newInstance 方法,我不需要删除它。

这里是错误的,你的newInstance函数的return类型应该是指向Animal的指针:

Animal *newInstance(string animal) // Note the '*'
{
   return new Animal(animal);
}

或者,正如@chris 建议的那样,new 在现代 C++ 中确实很少使用,您需要使用智能指针,例如使用 std::shared_ptr:

#include <memory>

std::shared_ptr<Animal> newInstance(string animal)
{
   return std::make_shared<Animal>(animal);
}

或者你可以 return 一个值,然后你应该删除 new:

Animal newInstance(string animal)
{
   return Animal(animal);
}