![](/img/trans.png)
[英]error C2440: '=': cannot convert from 'std::list<std::string,std::allocator<_Ty>> *'to '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.