2012-10-05 3 views
1

배열을 취하는 배열을 반환하는 함수를 프로토 타입하는 방법을 알고 싶습니다. 배열을 프로토 타이핑 한 후 어떻게 구현할 수 있습니까?배열을 반환하는 함수를 만드는 방법

이 정확합니까?

coffee* getData(*coffe); 

int main() { 
    coffee cf[256]; 
    coffee FinalCoffee[256]; 
    FinalCoffee=getData(cf); 
} 

coffee getData(coffee objcf[]) { 
    for(int i=0;i<SIZE;i++) { 
     objcf[i].brand="nescafe"; 
    } 
    return coffee; 
} 

Plsease이 점에 대해 조언 해주세요. 나는 그것을 다시 처리 할 수있는 다른 함수에 업데이트 된 배열을 전달할 수 있도록 배열을 다시 가져올 수 있어야합니다.

답변

5

코드에는 일치하는 선언 및 함수 정의가 없습니다. 이것은 작동하지 않습니다.

std::vector<coffee> getData(std::vector<coffee> const& objs) { 
    std::vector<coffee> result; 
    // Do something to fill result 
    return result; 
} 

을하지만, 당신의 예에서와 같이, 당신은 원한다면에게 원래 배열을 조작, 오히려 새로운 하나를 돌아보다, 다음은이없는 것이 더 의미가 있습니다 :

그러나 다음을 수행 모든 값을 반환하고, const가 아닌 참조로 인수를 전달하기 :

void manipulateData(std::vector<coffee>& objs) { 
    for (auto& obj : objs) 
     obj.brand = "nescafe"; 
} 

을 경험적으로, 표준 라이브러리 컨테이너 ++ C에 찬성 C 배열을 피하려고합니다. 이것은 당신의 인생을 많이 만들 것입니다 많이 쉽게. 함수 헤더의 선언 (프로토 타입)과 정의 (구현)을 시작하려면

+1


는 영업 이익은 배열을 조작하려는 것처럼, 사람은 그가 실제로 전혀 새로운 하나를 반환 할 필요가있는 경우 궁금해 있지만, 사실은 원본을 수정합니다. – Benj

+0

이전 situtation에서 벡터에 대한 프로토 타이핑 및 구현 방법은 – rasul1719435

+0

@ rasul1719435입니다. 프로토 타입은 함수 헤더와 동일합니다. 변경할 것이 없습니다. –

2

이 다릅니다 : 마지막으로 하나에도 반환하지 않습니다

coffee* getData(*coffe); 

coffee getData(coffee objcf[]) 

수스 바늘. 귀하의 질문에 관해서는

, 당신의 프로토 타입은 getData포인터을 반환하지만 당신은 배열에 할당 말한다. 이것은 작동하지 않습니다. 대신 포인터로 FinalCoffee를 선언 :

coffee cf[256]; 
coffee* FinalCoffee; 
FinalCoffee=getData(cf); 

당신이 정말 필요하지 않습니다하지만. getData이 인수로 전달한 배열을 수정하면 해당 수정 사항은 배열이 참조로 전달 될 때 cf 배열에도있게됩니다.

+0

이렇게 입력 할 수 있습니다. void getData (* coffee); 이것은 프로토 타이핑입니다. void getData (coffee cf []) { } int main() { coffee cf [256]; getData (cf); } – rasul1719435

+0

@ rasul1719435 맞습니다. 그러나 프로토 타입과 실제 구현이 일치하는지 확인하십시오! –

+0

void getData (* coffee); \\ Prototying void getData (coffee cf []) {} \\ 구현 은 일치합니까 – rasul1719435

4

C++에서이를 수행 할 수 있습니다. 구조에 대한 언급.

#include <iostream> 
using namespace std; 

template<size_t N> 
int (&f(int(&A)[N])) [N] { 
     for(auto& i: A) i +=10; 
     return A; 
} 

int main() { 
     int A[3] = {1,2,3}; 
     auto& AA = f(A); 
     for(auto i: AA) cout << i << "\n"; 
}  

을하지만, 콘라드 루돌프는 지적, 당신이 실제로 F에서 아무것도 반환이 필요하지 않는 한(), 배열이 곳에서 수정 : 미운 구문 앞서, 형식 정의를 권장합니다. 그리고 당신의 기능을 훨씬 더 간단 할 수있다 : 주어진 예에서 void f(int (&A)[N])

관련 문제