2014-01-10 1 views
0

나는 인터넷 검색을하고, 반 친구들에게 물었고, 마침내 교수님에게이 특별한 문제에 대해 물었습니다. 그러나 아직 해결책을 찾지 못했습니다. 나는 누군가가 나를 도울 수 있기를 바라고 있습니다.구조체 배열에서 변수를 편집하는 방법은 무엇입니까?

기본적으로 구조체 당 4 가지 정보 (국가 이름, 국가 수, 국가 및 국가 밀도)를 포함하는 구조체 배열을 만들어야합니다. 이 정보는 .txt 문서의 배열 구조체에 기록됩니다. 이 정보는 상기 어레이로부터 콘솔 상에 기록 될 것이다.

배열의 구조체에 무엇이든 쓰려고 시도 할 때 2 개의 오류가 발생합니다. "const char [8] '에서'char [30] '로 변환 할 수없고'operand '[]'는 이러한 피연산자와 일치합니다. 피연산자 유형은 CountryStats [int]"입니다.

countries[0].countryName = "A"; 

가 난 단지 구조체를 사용하기 시작했습니다 명심 이것은 내가 배열을 처음 사용 : 이러한 오류는 라인을 참조 모두. 또한 벡터와는 달리 배열을 사용해야합니다.

여기 내 코드입니다 :

#include <iostream> 
#include <fstream> 
#include <string> 
#include <vector> 

struct CountryStats; 
void initArray(CountryStats *countries); 

const int MAXRECORDS = 100; 
const int MAXNAMELENGTH = 30; 

struct CountryStats 
{ 
    char countryName[MAXNAMELENGTH]; 
    int population; 
    int area; 
    double density; 
}; 

// All code beneath this line has been giving me trouble. I need to easily edit the 
// struct variables and then read them. 
int main(void) 
{ 
    CountryStats countries[MAXRECORDS]; 
    initArray(*countries); 
} 

void initArray(CountryStats countries) 
{ 
    countries[0].countryName = "A"; 
} 

난 그냥 배열 내의 구조체에 정보를 기록하고 콘솔에 떨어져 그것의 정보를 읽는 방법을 알아 내려고 시도하고 지금부터. 이것에 대한 해결책을 찾은 후에는 다른 모든 것이 제자리에 있어야합니다.

오, 그리고 마지막주의 사항 : 아직 포인터 (*)의 기능을 아직 알지 못했습니다. 저는 과거의 프로그래밍 교육이 주로 자바로 진행 되었기 때문에 C++에 대한 새로운 지식을 가지고 있습니다. 이 코드에있는 포인터의 모든 포함은이 문제를 해결하기 위해 내 급우 및 교수의 영향을 받았습니다.

미리 감사드립니다.

void initArray(CountryStats *countries); 

을하지만위한 :

+2

"이 코드의 모든 포인터는이 문제를 해결하기 위해 동료와 교수님의 영향을 받았습니다." - "이 문제를 복잡하게 만들려고 노력하다"는 문제가 해결되었습니다. – Shoe

+2

수업은 배열에 할당 할 수 없다는 것을 결코 가르쳐주지 않으셨습니까? C 문자열을 복사하기 위해서는'strcpy()'를 사용해야한다. 왜'std :: string'을 사용하지 않습니까? – Barmar

+0

country라는 단일 CountryStats 포인터를 사용하는 것이 약간 잘못된 것입니다. 또한, CoutnryStats 구조체를 초기화하고, 그다지 잘못 표시되지 않는 한 역 참조를하려고합니다. – BWG

답변

0

두 문제

void initArray(CountryStats countries) 

이 있어야합니다.

strcpy(countries[0].countryName,"A"); 

(하지만 난 문자 [] 대신 C++ 문자열을 사용하는 것이 좋습니다)하지만, 다시 벡터 <> 문자열 등의 사용 C++ 기능을 말한다.

+0

감사합니다. 이것은 저에게 효과적이었습니다. 감사! :) (또한 교수님은 명시 적으로 클래스에서 아직 배운 적이없는 C++ 개념을 벡터에 포함시키지 않기를 명시 적으로 명시했습니다.이 규칙도 이해할 수 없지만 ... 오 잘.) – Muddy

0

당신은에 대한 정의를 정의하지 않습니다

void initArray(CountryStats countries); 

하는 countries가 배열이 아닌. CountryStats에 대해 operator[]이 정의되어 있지 않으므로 countries[0] 표현식은 컴파일되지 않습니다.

당신이 std::array, 내가 사용하는 당신을 건의 할 것 (몇 가지 이상한 이유로) std::vector를 사용할 수 없기 때문에 : 당신이 매저 키스트를 느끼는 경우

template<std::size_t N> 
void initArray(std::array<CountryStats, N>& ref) { 
    for (std::size_t i = 0; i < N; i++) 
     // initialize ref[i] 
} 

물론, 당신은 또한 C 스타일 배열을 사용할 수 있습니다 :

void initArray(CountryStats* arr, int size) { 
    for (int i = 0; i < size; i++) 
     // initialize arr[i] 
} 

하지만 아마 배열의 차원을 두 번째 매개 변수로 제공해야 할 것입니다.

void initArray(CountryStats *countries) 

그리고 당신은 스타일 문자열 c를 복사하는 strcpy를 사용해야합니다 :

+0

밀도, 인구 및 면적도 마찬가지로 수정할 수 있도록 참조로 만들고 싶습니까? 예 : void initArray (CountryStats & countries); – BWG

관련 문제