传递字符串时出错
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);
}
这是我的代码:
#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);
}