我是C ++编程的新手,我只是在练习。这是我在stackoverflow上的第一个主题(因为现在我在谷歌搜索中使用过这个...)
我正在尝试使函数返回完整的字符串向量。 当然我不能使用默认返回,所以我用指针作为参数创建了一个void函数,它将向量复制到参数
我试图做的事情:
class CadastroPessoas
{
private:
string dadosPessoais[MAX_PESSOAS];
public:
void lerDadosTodasPessoas(string &vetor);
/*
outras coisas...
*/
};
void CadastroPessoas::lerDadosTodasPessoas(string &vetor)
{
vetor = this->dadosPessoais;
}
但是当我这样做时:
CadastroPessoas * EmpresaPessoas = new CadastroPessoas()
string dadosPessoais[MAX_PESSOAS];
EmpresaPessoas->lerDadosTodasPessoas(dadosPessoais);
我收到此错误消息:
cannot convert parameter 1 from 'std::string *[200]' to 'std::string &'
答案 0 :(得分:0)
当然我不能使用默认返回
为什么不呢?
无论如何,你得到的错误正是错误信息中描述的原因:你编写了一个期望引用字符串的函数,并且你试图向它传递一个指向200个字符串的指针(数组在传递时会降级为指针)一个功能)。它们完全不同。
你要么:
A)在函数(string *vector
)
B)使你的数组成为一个向量并传入对它的引用(std::vector<string>& vector
)
C)只需返回一个向量并完成它。不要以为会创建副本。复制省略和/或移动语义将在这里帮助你。
答案 1 :(得分:0)
你将一个字符串数组传递给一个不可能的字符串,我建议你使用std::array
:
const int MAX_PESSOAS = 5;
class CadastroPessoas
{
private:
array<string, MAX_PESSOAS> dadosPessoais;
public:
void lerDadosTodasPessoas(array<string, MAX_PESSOAS> &vetor);
};
void CadastroPessoas::lerDadosTodasPessoas(array<string, MAX_PESSOAS> &vetor)
{
vetor = dadosPessoais;
}
int main()
{
CadastroPessoas *EmpresaPessoas = new CadastroPessoas();
array<string, MAX_PESSOAS> dadosPessoais;
EmpresaPessoas->lerDadosTodasPessoas(dadosPessoais);
delete EmpresaPessoas; // <-- Don't forget to delete it
}
答案 2 :(得分:0)
string dadosPessoais[MAX_PESSOAS];
这是一个长度为MAX_PESSOAS的字符串数组。虽然这个
void CadastroPessoas::lerDadosTodasPessoas(string &vetor)
{
vetor = this->dadosPessoais;
}
函数通过引用获取单个string
对象。更改函数以接受数组;但是,在这种方法中,您需要逐个复制每个对象。此外,一般不鼓励玩数组,因为它们因臭虫而臭名昭着。
更好的方法是使用std::array
(如果你知道大小是固定的)或std::vector
(如果你认为大小可以在运行时变化。
答案 3 :(得分:0)
string &vetor
是对一个字符串的引用,我认为你需要vector<string> &vetor
代替,string dadosPessoais[MAX_PESSOAS]
是c-array字符串数组,你可以创建vector使用向量构造函数来表示它的字符串:vector<string> tmp(dadosPessoais,dadosPessoais+MAX_PESSOAS)
。但是最好在vetor中推动所有字符串:vetor.push("foo"); vetor.push("bar");
。