Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;字符串数组错误:无法将参数1从';std::string[200]';至';std::string&'; 我在C++编程方面很新,我只是在练习。这是我在stackoverflow上的第一个主题(从现在起,我在google搜索中使用过这个…)_C++_Arrays_String_Pointers - Fatal编程技术网

C++;字符串数组错误:无法将参数1从';std::string[200]';至';std::string&'; 我在C++编程方面很新,我只是在练习。这是我在stackoverflow上的第一个主题(从现在起,我在google搜索中使用过这个…)

C++;字符串数组错误:无法将参数1从';std::string[200]';至';std::string&'; 我在C++编程方面很新,我只是在练习。这是我在stackoverflow上的第一个主题(从现在起,我在google搜索中使用过这个…),c++,arrays,string,pointers,C++,Arrays,String,Pointers,我试图让函数返回字符串的完整向量。 当然,我不能使用默认的返回,所以我用一个指针作为参数创建了一个void函数,它会将向量复制到参数中 我想做的是: class CadastroPessoas { private: string dadosPessoais[MAX_PESSOAS]; public: void lerDadosTodasPessoas(string &vetor); /* outras coisas... */ }; vo

我试图让函数返回字符串的完整向量。 当然,我不能使用默认的返回,所以我用一个指针作为参数创建了一个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);
我得到这个错误信息:
无法将参数1从'std::string*[200]'转换为'std::string&'

当然,我不能使用默认返回

为什么不呢

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

你可以:

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

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

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

string dadosPessoais[MAX_PESSOAS];
这是长度为MAX_PESSOAS的字符串数组。而这

void CadastroPessoas::lerDadosTodasPessoas(string &vetor)
{
   vetor = this->dadosPessoais;
}
函数通过引用获取单个
字符串
对象。更改函数以接受数组;但是,在这种方法中,必须逐个复制每个对象。此外,通常不鼓励使用阵列,因为它们是臭名昭著的臭虫温床


更好的方法是使用
std::array
(如果您知道大小是固定的)或
std::vector
(如果您认为大小在运行时可能会有所不同。

string&vector
是对one字符串的引用,我认为您需要使用
vector&vector
string-dadosPessoais[MAX\PESSOAS]
是字符串的c数组数组,您可以使用向量构造函数从中创建字符串向量:
向量tmp(dadopssoais,dadopssoais+MAX_PESSOAS)
。但是最好在vetor中正确地推送所有字符串:
vetor.push(“foo”);vetor.push(“bar”)

啊..介意将变量名翻译成英文吗?