구조물 C의 요소 벡터를 선언하고 요소의 수를 i로 표시합니다 (int 유형 입력)

StackOverflow https://stackoverflow.com/questions/574060

  •  05-09-2019
  •  | 
  •  

문제

이 코드를보고 (지식의 부족을 용서하십시오). 해결할 수없는 오류를 출력합니다. 구조물 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);

또는 크기 조정 방법을 사용하여 벡터 크기를 변경할 수 있습니다.

또는 추가 방법을 사용하여 벡터를 확장 할 수 있습니다 (크기를 명시 적으로 제공하지 않고).

그러나 전반적으로, 전체 버전의 코드와 코드가 무엇을하려고하는지에 대한 자세한 내용을 더 쉽게 제공하는 것이 더 쉬울 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top