C ++字符串数组错误:无法将参数1从'std :: string [200]'转换为'std :: string&'

时间:2013-10-21 21:07:57

标签: c++ arrays string pointers

我是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 个答案:

答案 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");