簡體   English   中英

C ++字符串數組錯誤:無法將參數1從“ std :: string [200]”轉換為“ std :: string&”

[英]C++ array of strings error: cannot convert parameter 1 from 'std::string [200]' to 'std::string &'

我是C ++編程的新手,我只是在練習。 這是我在stackoverflow上的第一個話題(因為現在我已經在Google搜索中使用過這個話題...)

我試圖使函數返回完整的字符串向量。 當然我不能使用默認的返回值,所以我用指針作為參數做了一個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 &'

當然我不能使用默認返回

為什么不?

無論如何,您都會由於錯誤消息中所述的確切原因而得到錯誤:您編寫了一個函數,該函數期望對字符串的引用,並且您試圖將其傳遞給200個字符串的指針(傳遞給函數時數組會退化為指針) )。 他們是完全不同的東西。

您要么:

A)在函數中使用指針( string *vector

B)將數組設為向量,並傳遞對其的引用( std::vector<string>& vector

C)只需返回一個向量並完成它。 不要以為會創建一個副本。 復制省略和/或移動語義將在這里為您提供幫助。

您正在將字符串數組傳遞給不可能的字符串,建議您使用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
}
string dadosPessoais[MAX_PESSOAS];

這是長度為MAX_PESSOAS的字符串數組。 雖然這

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

函數通過引用接受單個string對象。 更改函數以接受數組; 但是,在這種方法中,您必須一個一個地復制每個對象。 此外,通常不建議使用數組,因為它們以臭蟲的存在而臭名昭著。

更好的方法是使用std::array (如果您知道大小是固定的)或std::vector (如果您認為大小可以在運行時變化)。

string &vetor是對一個字符串的引用,我認為您需要vector<string> &vetor string dadosPessoais[MAX_PESSOAS]string dadosPessoais[MAX_PESSOAS]string dadosPessoais[MAX_PESSOAS] c數組數組,您可以使用vector構造函數從中創建字符串vector: vector<string> tmp(dadosPessoais,dadosPessoais+MAX_PESSOAS) 但是最好在vetor.push("foo"); vetor.push("bar");正確輸入所有字符串: vetor.push("foo"); vetor.push("bar"); vetor.push("foo"); vetor.push("bar");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM