• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

error C2672: 'begin': 일치하는 오버로드된 함수가 없습니다?

22.03.31 04:28 작성 조회수 1.36k

0

동작할 것 같은데 ... 위의 에러가 나서요.
설명 좀 해주세요.
 
#include <iostream> #define SIZE 5 using namespace std; int add(int arr[], int size) { int sum = 0; for (auto element : arr) { sum += element; } return sum; } int main() { int a[] = { 1,2,3,4,5 }; int c = add(a, SIZE); }

답변 1

답변을 작성해보세요.

0

강민철님의 프로필

강민철

2022.03.31

제시하신 코드 속 배열 a (int a[] = { 1, 2, 3, 4, 5};) 에는

.begin() 함수를 사용할 수 없어 발생한 에러입니다.

C++의 range based for loop는 .begin(), .end() 함수를 내포한 배열에만 사용이 가능합니다.

 

제대로 동작하는 코드의 예시는 아래와 같습니다.

std::array로 선언한 배열은 .begin()을 내포할 수 있습니다.

그렇기에 range based for loop을 사용할 수 있지요.

 

#include <iostream> 
#include <array>

#define SIZE 5 
using namespace std; 

int add(array<int,5> arr, int size) { 
	int sum = 0; 
	
	for (auto element : arr) {
		sum += element; 
	} return sum; } 

int main() { 
	array<int, 5> a = { 1,2,3,4,5 }; 
	
	int c = add(a, SIZE); 

}

 

참고로, 어떤 강의에서 발생한 문제인지를 알려주시면 더 상세히 알려드릴 수 있습니다.

감사합니다.