2013-10-21 102 views
0

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

我试图让一个函数返回一个完整的字符串向量。 当然我不能使用默认的回报,所以我做了一个空函数指针作为参数,它会矢量复制到参数

什么,我试图做的:

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

+0

Ahh..mind将你的变量名称翻译成英文? – P0W

回答

0

Of course I can't use a default return

为什么不能?

无论如何,你得到错误的原因正是错误消息中描述的原因:你写了一个函数,期望对一个字符串的引用,并且你正在试图传递一个指向200个字符串的指针(当数组降级到指针时传递给一个函数)。他们是完全不同的东西。

您:

A)以一个指针的函数(string *vector

B)使您的阵列的载体和传递给它(std::vector<string>& vector

C参)只要返回一个向量,并完成它。不要认为会创建副本。复制elision和/或移动语义将在这里帮助你。

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 
} 
0
string dadosPessoais[MAX_PESSOAS]; 

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

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

函数采取一个单一的string对象作为参考。更改函数以接受数组;但是,在这种方法中,您必须逐个复制每个对象。一般也不鼓励玩数组,因为它们是臭虫的臭虫。

一个更好的办法是使用std::array(如果你知道的大小是固定的),或者std::vector(如果你认为大小可以在运行时会有所不同。

0

string &vetor一个字符串的引用,我想你需要vector<string> &vetor相反,string dadosPessoais[MAX_PESSOAS]是一个字符串的C-array数组,你可以使用矢量构造函数从它创建的字符串的向量:vector<string> tmp(dadosPessoais,dadosPessoais+MAX_PESSOAS)但它会更好,推动所有字符串就在缩放的矢量:。vetor.push("foo"); vetor.push("bar");

相关问题