구조물 C의 요소 벡터를 선언하고 요소의 수를 i로 표시합니다 (int 유형 입력)
문제
이 코드를보고 (지식의 부족을 용서하십시오). 해결할 수없는 오류를 출력합니다. 구조물 C의 요소 벡터를 선언해야하지만 요소 수는 i (유형 int의 입력)가 필요합니다.
나는 또한 다른 접근 방식을 시도했지만 그들 모두에서 나는 오류를 받았다 (c를 int로 변환 할 수 없음). 어떻게 할 수 있습니까?
# include < iostream >
using std::cout;
using std::cin;
using std::endl;
# include < vector >
using std::vector;
struct C{
int cor;
vector<int>cores;
};
void LerVector( vector< C> &array ) ;
int main ()
{
int n;
bool done=false;
bool don=false;
vector<C>cidade;
int i;
while(!done){
cout<<"Entre o número de cidades "<<endl;
cin>>n;
if(n>500)
{
cout<<endl;
cout<<"O número máximo é 500"<<endl;
}
else
done=true;
}
n--;
while(!don){
cout<<"Entre o número de confederações"<<endl;
cin>>i;
if(i>100){
cout<<endl;
cout<<"Número máximo de 100 cidades"<<endl;
}
else {
LerVector( cidade) ;
don=true;
}
}
cin.get();
return 0;
}
//resolve...
void LerVector( vector< C> &array )
{
for ( size_t i = 0; i < array.size(); i++ )
cin>>array[i];
} // end function inputVector
해결책
설명과 함께 시도해 봅시다 :)
cin >> array[i];
그것은 추출하려고합니다 cin
Struct C의 대상으로, 실제로 작동하는 작업자가 필요합니다. 실제로 작동합니다.
istream & operator>>(istream &is, C &c) {
is >> c.cor; // or into whatever member
return is;
}
또한 언급 한 바와 같이 실제로 요소를 벡터에 먼저 추가해야합니다.
while(!don){
cout<<"Entre o número de confederações"<<endl;
....
} else {
cidade.resize(i); // resize to i elements
LerVector(cidade);
don = true;
}
다음에 텍스트를 포맷하십시오 (올바른 계약). 내가 그것을 밟는 것은 어려웠다 :)
다른 팁
코드가 생성 된 오류는 무엇입니까?
또한 귀하의 코드가 무엇을 해야하는지 잘 모르겠습니다. Main ()에서 C의 벡터를 만듭니다. 그러나 C에는 int의 벡터도 포함되어 있습니다. 그게 의도 된가요?
나는 당신이 무엇을하려고하는지 정말 명확하지 않습니다.
그러나 코드에서 이미 하나의 잠재적 오류가 표시 될 수 있습니다.
Lervector에서는 현재 항목이없는 벡터에 대한 참조를 제공하므로 크기가 0입니다.
당신이하려는 것은 내가 크기보다 작다면 배열에서 해당 항목을 업데이트한다는 것입니다. 그러나 크기를 시작할 때 크기가 0이므로 입력 루프로 들어가지 않을 것이라고 생각합니다.
이제 벡터가 크기로 초기화되지 않으므로 한계를 벗어나는 오류가 발생할 수 있습니다. rray를 크기를 조정해야합니다.
당신이하고 싶은 일을 생각한다면, 그것은 다음과 같아야합니다.
// First create an empty vector of C's
vector<C> cidade;
// cidade has zero elements now
// Read i from user
cin >> i;
// Resize vector to contain i elements
cidade.resize(i);
// Then go on and fill them.
int n;
for (n = 0; n < i; i++) {
cin >> cores;
cidade[n].cores.resize(cores);
// now cidade[n].cores has 'cores' elements, but they are uninitialized
}
중 하나 std::vector<T>
생성자는 초기 크기를 취하며 해당 숫자 이후에 선언되면 생성자에게 전달할 수 있다는 것을 알고 있습니다.
cin >> n;
std::vector<C> cidade(n);
또는 크기 조정 방법을 사용하여 벡터 크기를 변경할 수 있습니다.
또는 추가 방법을 사용하여 벡터를 확장 할 수 있습니다 (크기를 명시 적으로 제공하지 않고).
그러나 전반적으로, 전체 버전의 코드와 코드가 무엇을하려고하는지에 대한 자세한 내용을 더 쉽게 제공하는 것이 더 쉬울 수 있습니다.