【问题标题】:C++ array of strings error: cannot convert parameter 1 from 'std::string [200]' to 'std::string &'C++ 字符串数组错误:无法将参数 1 从 'std::string [200]' 转换为 'std::string &'
【发布时间】:2013-10-30 13:10:33
【问题描述】:

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

【问题讨论】:

  • 啊……介意把你的变量名翻译成英文吗?

标签: c++ arrays string pointers


【解决方案1】:

当然我不能使用默认返回

为什么不呢?

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

你要么:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      string dadosPessoais[MAX_PESSOAS];
      

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-10
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多