2014-04-11 1 views
0

이 함수는 둘 다 클래스의 공용 멤버입니다. 클래스의 전용 멤버에는 * theCharArray 및 * theFloat가 포함됩니다.내 기능에 문제가 있습니까? (private 클래스 멤버에서 float로 전달되는 메서드)

이 하나가 잘 작동 : 제발 말해 내가 뭘하는지

void theClass::getFloat(float theFloatParam) const 
{ 
    theFloatParam = this->theFloat; 
} 

"표현 수정 값을해야합니다 오류"이 사람이 강조

void theClass::getCharArray(char charArrayParam[]) const 
{ 
    strcpy(charArrayParam, this->theCharArray); 
} 

"이"와 VS Express는 말한다 잘못된.

+0

값을 전달하십시오. 참조로 전달하거나 주소로 전달하지만 그 중 하나를 수행하십시오. 그리고 굳은 답을 원한다면'theClass'에 대한 클래스 선언을 보여줍니다. – WhozCraig

+0

@WhozCraig OP의 코드는 그 이유 때문에 컴파일러 오류를 일으키지 않습니다. 'float'을 값으로 전달하고 함수 매개 변수 변수에 값을 할당하는 것은 완벽하게 허용되는 구문입니다. –

+2

@ user3169700 해당 멤버 변수와 그 멤버 함수의 정확한 선언을 보여 주시겠습니까? –

답변

1

theClass :: getCharArray (char charArrayParam [])에서 charArrayParam은 기본적으로 버퍼 크기에 대한 이해없이 문자 배열에 대한 포인터로 전달됩니다. 이것은 버퍼 오버 플로우 위험이있는 일종의 위험합니다. 인 Netter 인터페이스가 될 것이다 :

theClass::getCharArray(char *charArrayParam, int charArraySize) const { 
    strncpy(charArrayParam, this->theCharArray, charArraySize - 1); 
    charArrayParam[charArraySize - 1] = 0; 
} 

그리고 두번째 경우 :

void theClass::getFloat(float *theFloatParam) const 
{ 
    *theFloatParam = this->theFloat; 
} 

그렇지 theFloatParam이 함수 내의 호출자에 영향을 미치지 않는다는 점을 변경 값으로 전달되기 때문이다.

+0

이것들은 모두 참되고 좋은 충고이지만, OP가받는 컴파일러 오류를 설명하지도 않습니다. –

+1

구문 오류가없는 것처럼 보이기 때문에 theFloatParam 인수는 수정 가능해야하며 컴파일러는 불평해서는 안됩니다. –

+0

나는 별표를 매개 변수에 넣었지만 대괄호 안에 정의를 넣지 않았다. VS를 받아 들일 수있는 유일한 방법은 ... 누가 알 수 있었는지 (대괄호 본문에 별표를 넣었을 때의 오류) * float float로 변환 할 수 없습니다). – user3169700

관련 문제