2017-05-11 1 views
-1

중복되는 것으로 표시하지 마십시오. 비슷한 질문이 있지만 포인터를 사용하여 응답하거나 동일한 문제를 해결하지 않았거나 언어 C 대신 C++.C++ : 구조체의 배열을 참조로 함수에 전달

구조체 배열을 함수에 전달하려고하는데 이렇게하려고하면 declaration of ‘a’ as array of references 오류가 발생합니다. 나는 문제가 컴파일러가 구조체 대신 배열로 읽는다는 사실에 있다고 생각하지만이 문제를 해결하는 방법을 모르겠습니다.

struct StructA { 
    string name; 
    float income; 
    int amount; 
} 

메인 내에서이 구조체 선언 :

StructA a[15]; 

을 그리고 같은 함수에 전달하고있다 :

void FunctionA(StructA& a[], int& count) { //& to pass by reference 

} 

나는 세 가지 요소의 구조체를 정의 또한 StructA의 정의 바로 아래에 위의 함수에 대한 프로토 타입이 있습니다.

내가 뭘 잘못하고 있니?

편집 : 누군가 다른 사람의 질문으로이 질문을 표시했습니다. 그렇지 않습니다. 나는 프로그래밍 수업에 대한 소개에있어, 그리고 내가 분명히 말했듯이, 나는 포인터를 사용할 수 없다. 다른 질문에서 사용하는 것이 무엇인지 생각해보십시오. 포인터. 차이점을 보시겠습니까? 더욱 더 실용적인 수준에서 나는 이미 Pass a dynamic array of objects to function에서 권장되는 해결책을 시도했지만 나에게 도움이되지 못했고 다른 질문에서 언급 할 수 없기 때문에 새로운 질문을해야합니다. 나는 교수님에게 물어볼 수있을 때까지 기다릴 것입니다, grazie.

+0

배열이 있어야하나요?그렇지 않다면'StructD'의'std :: vector '을 선언하고 함수에'std :: vector & container'를 전달하십시오. –

답변

1

사용이 구문 :

void FunctionA(StructA (&a) [SIZE], int &count) 

SIZE이 경우에 언급되어야한다.

구문 (void FunctionA(StructA &a [SIZE]))은 배열에 대한 참조가 아닌 참조 배열 (&)을 전달한다는 의미입니다.

또한 기능 템플릿을 사용할 수 있습니다 템플릿을 사용 아마데우스

됩니다 지적한대로 배열의 size로 당신이 그것을 의미하는 경우 count을 통과 할 필요가 없습니다

template <size_t Size> 
void FunctionA(StructA (&a) [SIZE]) 

응답으로 다른 크기의 기능을 활성화 : 제임스 루트

다음과 같이 다음 기능을 사용할 수 있습니다 :

+0

귀하의 방법을 사용했지만 새로운 오류가 발생했습니다 : '매개 변수'a '알 수없는 문자 배열에 대한 참조 포함' – Matt

+0

@Matt : SIZE를 사용해야합니다. 나는 대답을 편집하고 더 자세히 설명한다. – Shadi

1

참조로 모든 크기의 배열을 전달하려면, 당신은 할 수 있습니다 : 당신이 각 시간을 지정할 필요가 없습니다

template <size_t Size> 
void FunctionA(StructA (&a)[Size]) 

그것은, 배열의 크기를 추론 할 수 있습니다.

StructA a1[10]; 
StructA a2[15]; 

FunctionA(a1); 
FunctionA(a2);