0

我是 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 &'

4

3 回答 3

0
string dadosPessoais[MAX_PESSOAS];

这是一个长度为 MAX_PESSOAS 的字符串数组。虽然这

void CadastroPessoas::lerDadosTodasPessoas(string &vetor)
{
   vetor = this->dadosPessoais;
}

string函数通过引用获取单个对象。更改函数以接受数组;但是,在这种方法中,您必须一个一个地复制每个对象。此外,通常不鼓励使用数组,因为它们因成为臭虫的温床而臭名昭著。

更好的方法是使用std::array(如果您知道大小是固定的)或std::vector(如果您认为大小可以在运行时变化。

于 2013-10-21T21:16:47.057 回答
0

string &vetor是对一个字符串的引用,我认为您需要的是字符串的 c-array 数组,您可以使用向量构造函数从中创建字符串向量vector<string> &vetor:。但是最好将所有字符串都推到 vetor:中。string dadosPessoais[MAX_PESSOAS]vector<string> tmp(dadosPessoais,dadosPessoais+MAX_PESSOAS)vetor.push("foo"); vetor.push("bar");

于 2013-10-21T21:19:19.953 回答
0

当然我不能使用默认返回

为什么不?

无论如何,您得到的错误正是错误消息中描述的原因:您编写了一个期望对字符串的引用的函数,并且您试图将一个指向 200 个字符串的指针传递给它(数组在传递给函数时会降级为指针)。它们是完全不同的东西。

你要么:

A) 在函数中取一个指针 ( string *vector)

B) 使您的数组成为向量并传入对它的引用 ( std::vector<string>& vector)

C)只需返回一个向量并完成它。不要假设会创建一个副本。复制省略和/或移动语义将在这里为您提供帮助。

于 2013-10-21T21:10:32.157 回答